Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何返回Django模型中两个DateTimeFields的差异?_Python_Django_Django Models_Django Forms - Fatal编程技术网

Python 如何返回Django模型中两个DateTimeFields的差异?

Python 如何返回Django模型中两个DateTimeFields的差异?,python,django,django-models,django-forms,Python,Django,Django Models,Django Forms,我试图创建一个简单的时间表,在单独的列中包含输入时间、输出时间和总时间,但在使用DateTimeFields时遇到了麻烦。我最初在我的models.py中尝试了这一点: class Entry(models.Model): time_in = models.DateTimeField(default=timezone.now) time_out = models.DateTimeField(default=timezone.now) total_time = models.Durat

我试图创建一个简单的时间表,在单独的列中包含输入时间、输出时间和总时间,但在使用DateTimeFields时遇到了麻烦。我最初在我的models.py中尝试了这一点:

class Entry(models.Model):
  time_in = models.DateTimeField(default=timezone.now)
  time_out = models.DateTimeField(default=timezone.now)
  total_time = models.Duration(time_out - time_in)
在阅读了一些答案后,我尝试了以下方法:

class Entry(models.Model):
  time_in = models.DateTimeField(default=timezone.now)
  time_out = models.DateTimeField(default=timezone.now)
  @property
  def duration(self):
    return self.time_out - self.time_in
和两个返回的TypeErrors(-是DateTimeField不支持的操作数)。我尝试将此添加到视图中:

def new_entry(request):
    if request.method == 'POST':
        form = EntryForm(request.POST)
        if form.is_valid():
            timeIn = form.cleaned_data.get('time_in')
            timeOut = form.cleaned_data.get('time_out')
            totalTime = timeOut - timeIn
            form.save()

但是,如果这是正确的方向,我不知道如何将其发送回模型和数据库表,而不将其作为循环导入。

您使用的是什么版本的django?您的第二次尝试应该可以正常工作。第二个版本,带有
@property
,在我看来是正确的-至少对于模型实例是如此!。如果您在减去
DateTimeField
时遇到错误,在我看来,它是在类而不是实例上进行计算的-也许可以查看您的管理定义,以确保您没有试图在任何地方将
duration
声明为可编辑字段?如其他人所述,您的第二个解决方案应该工作对于您的视图:您不需要处理表单字段。只要执行以下操作就可以了:if form.is_valid():form.save(),我重试了,第二个选项不再返回TypeErrors(不确定我修复了什么,但可以!),但是,我一直在阅读关于它返回的属性对象的内容,我不知道如何将该对象转换为一个可以保存到数据库中的字段,因为它可以节省时间。如果要节省时间,则不需要保存一个不同的持续时间字段。将duration等派生值转换为属性的目的是避免存储冗余信息。特别是因为在需要时计算差异比两种存储方式更可靠,并且希望不会失去同步。您使用的是什么版本的django?您的第二次尝试应该可以正常工作。第二个版本,带有
@property
,在我看来是正确的-至少对于模型实例是如此!。如果您在减去
DateTimeField
时遇到错误,在我看来,它是在类而不是实例上进行计算的-也许可以查看您的管理定义,以确保您没有试图在任何地方将
duration
声明为可编辑字段?如其他人所述,您的第二个解决方案应该工作对于您的视图:您不需要处理表单字段。只要执行以下操作就可以了:if form.is_valid():form.save(),我重试了,第二个选项不再返回TypeErrors(不确定我修复了什么,但可以!),但是,我一直在阅读关于它返回的属性对象的内容,我不知道如何将该对象转换为一个可以保存到数据库中的字段,因为它可以节省时间。如果要节省时间,则不需要保存一个不同的持续时间字段。将duration等派生值转换为属性的目的是避免存储冗余信息。特别是因为在需要时计算差异比两种方式存储并希望不会失去同步更可靠。