如何在Django中显示已用时间

时间:2018-06-07 19:26:31

标签: django

所以,我试图在最近访问过的历史记录的页面上显示已用时间。在我的模型上,我有以下属性。

models.py

class History(models.Model):
    ...
    created_on = models.DateTimeField(auto_now_add=True)
    ...

我已经检查了the date documentation,但它没有办法表示从创建时间到现在所经过的时间。 Django不支持该功能吗?那么我应该自己实现吗?

1 个答案:

答案 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