我仍然对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上。
答案 0 :(得分:2)
必须有一个链接到模板的视图。你需要连接一个视图来执行一个像你想要做的那样的CRUD动作。
如果您不想重新加载模板,可以对视图使用AJAX请求来执行CRUD操作。
在共享代码段中,您创建了一个更新last_visit
的模型属性。
请注意,此模型的last_visit
在执行模板插值时更新,而不是在点击链接时更新,我认为这不是您正在进行的操作。
<a href="{{ contact.update_visit_date }}">