所以,我试图在最近访问过的历史记录的页面上显示已用时间。在我的模型上,我有以下属性。
models.py
class History(models.Model):
...
created_on = models.DateTimeField(auto_now_add=True)
...
我已经检查了the date documentation,但它没有办法表示从创建时间到现在所经过的时间。 Django不支持该功能吗?那么我应该自己实现吗?
答案 0 :(得分:1)
据我所知,Django没有这样的功能。最好实现自己的。使用js
,例如setInterval()
和Ajax
更新特定时间字段。
在此之前,您需要在离开页面时添加要记录的字段。
created_on = models.DateTimeField(auto_now_add=True)
left_at = models.DateTimeField(auto_now_add=True)
<强>的js 强>
在HTML页面中使用此脚本非常重要,因为我们将使用Django变量。
var id_obj = '{{ obj.id }}'; // $('tag').val();
totalSeconds = 5;
setInterval(function(){
recordElapsedTime();
},totalSeconds * 1000);
var recordElapsedTime = function(){
$.ajax({
url:"/url/to/view/",
type:"POST",
data:{
id_obj:id_obj,
csrfmiddlewaretoken:'{{ csrf_token }}'
},
});
}
查看强>
import datetime
def elapsedTime(request):
if request.method == 'POST' and request.is_ajax():
id_obj = request.POST.get('id_obj')
obj = get_object_or_404(ObjectModel,id=id_obj)
obj.left_at = datetime.datetime.now()
obj.save()
现在很容易确定经过的时间,例如Model中的属性方法。
@property
def elapsed_time(self)
return (self.left_at - self.created_on).seconds