直接从模板更新/保存模型日期值?

时间:2017-08-27 22:49:54

标签: python django

我仍然对Django缺乏经验,我想知道是否可以直接从模板更新/保存我数据库中的今天日期?

我有一个Django-filter filterView(listView),它显示了我目前在我的数据库中所在部门的人员列表。我想通过点击< \ a>更新日期时间值(当人们最后一次访问时)到今天的日期。列表中显示的链接。这样我就不必设置更新视图,只是为了在我上次访问同事时进行更新。这样的事情甚至可能吗?

我尝试使用@property标记在models.py中实现一个函数,但是当我刷新网页或访问该页面时,它会自动更新它,而不必点击链接。

编辑:这是代码:

# models.py
@property
def update_visit_date(self):
    self.last_visit = timezone.make_aware(datetime.datetime.today())
    super(Directory, self).save()
    return reverse('directory_list')

# snippet from my template directory_list.html
  {% for contact in items %}
    <tr>
      <td>{{ contact.first_name }}</td>
      <td>{{ contact.last_name }}</td>
      <th><a href="{{ contact.get_absolute_url }}">{{ contact.email_address }}</a></th>
      <td>{{ contact.phone_number_1 }}</td>
      <td>{{ contact.get_department_display }}</td>
      <td>{{ contact.room_number }}</td>
      {% if contact.is_past_due == 'no_visit_performed' %}
        <td class="info">{{ contact.last_visit }}<a href="{{
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td>
      {% elif contact.is_past_due == 'visit_good' %}
        <td class="success">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td>
      {% elif contact.is_past_due == 'visit_old' %}
        <td class="warning">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td>
      {% elif contact.is_past_due == 'need_visit' %}
        <td class="danger">{{ contact.last_visit }}<a href="{{ 
contact.update_visit_date }}"> {% bootstrap_icon "plus-sign" %}</a></td>
      {% endif %}
    </tr>
  {% empty %}

这是可能的,从模板链接执行CRUD吗?或者我是以错误的方式来做这件事的?任何帮助是极大的赞赏。非常感谢你!

编辑:找到了决心。我最终做的是创建了一个执行CRUD的基于函数的视图。这是代码:

from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
def last_visit_view(request, pk):
    last_visit_obj = Directory.objects.filter(pk=pk)
    if last_visit_obj:
        last_visit_obj = last_visit_obj[0]
        last_visit_obj.last_visit = datetime.now()
        last_visit_obj.save()
    return HttpResponseRedirect(reverse('directory_list'))

我的模板网址调用此功能,效果很好。现在我需要了解如何将过滤后的结果保存在HttpResponseRedirect上。

1 个答案:

答案 0 :(得分:2)

必须有一个链接到模板的视图。你需要连接一个视图来执行一个像你想要做的那样的CRUD动作。

如果您不想重新加载模板,可以对视图使用AJAX请求来执行CRUD操作。

在共享代码段中,您创建了一个更新last_visit的模型属性。

请注意,此模型的last_visit在执行模板插值时更新,而不是在点击链接时更新,我认为这不是您正在进行的操作。

<a href="{{ contact.update_visit_date }}"> 
相关问题