在ModelForm中减去2个时间字段

时间:2016-12-12 12:43:47

标签: python django django-models django-forms

我正在尝试为飞行员建造一个小型的日志,用户可以输入起飞时间和登陆时间,表格将在以下时间内返回,时间为02:34小时,即2小时34分钟。 在models.py方面,我就是这样设置的:

take_off_time = models.TimeField()
land_time = models.TimeField()
tot_time_field = models.DurationField()

model.Duration似乎不是这里的答案...... 到目前为止,我在forms.py上简单地渲染了模型。

所以问题是:

  1. 我可以使用什么代替durationField?

  2. 如何获取输入并进行计算?

  3. 我在models.py中试过一个简单的:

    def get_total_time(self):
        self.tot_time_field = self.land_time - self.take_off_time
        return self.tot_time
    

    然后在表单中使用tot_time但我不确定这是否正确。

2 个答案:

答案 0 :(得分:0)

class Foo(models.Model):
    def save(Foo, self).save(*args, **kwargs):
        if not self.tot_time_field:
            self.tot_time_field = self.get_total_time()
        super(Foo, self).save(*args, **kwargs)

答案 1 :(得分:0)

Hedde van der Heide让我朝着正确的方向前进,我终于找到了答案。 首先我像这样设置一个total_time:

def time_delta(self):
    t = self.land_time - self.take_off_time
    return str(td)

然后我保存了它:

    def save(self,*args,**kwargs):
        self.tot_time_field = self.time_delta()
        super(Log,self).save(*args,**kwargs)

我将模型中的tot_time_field = models.DurationField()更改为:

tot_time_field = models.CharField(max_length=200,blank=True)because i couldn't make the duration field work.

最后但并非最不重要的是,模型前两个模型必须更改为DateTimeField 而不是TimeField,因为time_delta(td)不会以其他方式工作以便将其包装起来: models.py:

take_off_time = models.TimeField()
land_time = models.TimeField()
total_time_field = models.Charfield()

def time_delta(self):
    t = self.land_time - self.take_off_time
    return str(td)

def save(self,*args,**kwargs):
    self.tot_time_field = self.time_delta()
    super(Log,self).save(*args,**kwargs)

希望有所帮助....