计算两个时间域之间的差异并将其存储在Django模型中

计算两个时间域之间的差异并将其存储在Django模型中,django,python-3.x,django-models,Django,Python 3.x,Django Models,我有一个模型,其中包含单个用户的时间字段。我的模型有多个用户,我的目标是获得这两次之间的差异,并将差异存储在同一个模型中,但我不太确定如何做到这一点 型号。py: class Gettime(models.Model): id= models.ForeignKey(User, on_delete = models.CASCADE) start_time = models.DateTimeField() stop_time = models.DateTimeField()

我有一个模型,其中包含单个用户的时间字段。我的模型有多个用户,我的目标是获得这两次之间的差异,并将差异存储在同一个模型中,但我不太确定如何做到这一点

型号。py:

class Gettime(models.Model):
    id= models.ForeignKey(User, on_delete = models.CASCADE)
    start_time = models.DateTimeField()
    stop_time = models.DateTimeField()
    hours = models.IntegerField() #or is there a better data type to store the time difference?
def diff(request):
    data = User.objects.filter(pk__gt=1) 
    time_table = []
    for user in data:
        start = Gettime.objects.filter(id = user).only('start_time')
        stop = Gettime.objects.filter(id = user).only('stop_time')
        diff = start - stop    #However, this doesn't work.
视图。py:

class Gettime(models.Model):
    id= models.ForeignKey(User, on_delete = models.CASCADE)
    start_time = models.DateTimeField()
    stop_time = models.DateTimeField()
    hours = models.IntegerField() #or is there a better data type to store the time difference?
def diff(request):
    data = User.objects.filter(pk__gt=1) 
    time_table = []
    for user in data:
        start = Gettime.objects.filter(id = user).only('start_time')
        stop = Gettime.objects.filter(id = user).only('stop_time')
        diff = start - stop    #However, this doesn't work.
如何获取开始时间和停止时间字段之间的时间差并将其存储在我的模型中?

A是存储两个
日期时间字段之间差异的好字段

diff = models.DurationField(null=True, blank=True)
然后,只需一个查询就可以更新整个表中该字段的每个实例

from django.db.models import F
Gettime.objects.update(diff=F('stop_time') - F('end_time'))
F
是一种引用数据库/查询中现有字段/值的方法。例如,您可以使用
F
表达式来递增更新
Model.objects.update(int\u field=F('int\u field')+1)中的字段。

完成此操作后,应该向
Gettime
模型添加一个信号处理程序,该处理程序在每次保存时设置
diff
的值

from django.db.models.signals import pre_save
from django.dispatch import receiver

@receiver(pre_save, sender=Gettime)
def my_handler(sender, instance, **kwargs):
    instance.diff = instance.stop_time - instance.start_time

这将使sue始终在模型上设置
diff
,您试图从类似列表的对象
QuerySet
获取时间数据。您需要在此基础上迭代QuerySet,将FK关系分配给字段
id
,这不是一个好方法idea@foo-你能举个小例子吗?我是Django的新手。@foo bar为什么不添加'id'呢?F代表什么?在这里使用DurationField字段并不好,因为它在更改过程中不会自动更新。最好使用这两个字段中的任何一个来生成
第三个值fields@foo-bar如何使用生成时间并将其保存在模型中DurationField?@Iain Model.objects.update(int_field=F('int_field')+1)是什么意思?