-:'NoneType'和'datetime.datetime'的不受支持的操作数类型

时间:2018-11-22 15:03:14

标签: python django

正在给出此错误,但在此之前,我不知道发生了什么

Model.py

class MovRotativo(models.Model):
    checkin = models.DateTimeField(auto_now=False, null=False, blank=False)
    checkout = models.DateTimeField(auto_now=False, null=True, blank=True)
    valor_hora = models.DecimalField(max_digits=5, decimal_places=2)
    veiculo = models.ForeignKey(Veiculo, on_delete=models.CASCADE)
    pago = models.BooleanField(default=False)

    def horas_total(self):
        return math.ceil((self.checkout - self.checkin).total_seconds() / 3600)

    def total(self):
        return self.valor_hora * self.horas_total()

    def __str__(self):
        return self.veiculo.placa

views.py

@login_required
def movrotativos_novo(request):
    form = MovRotativoForm(request.POST or  None)
    if form.is_valid():
        form.save()
    return redirect('core_lista_movrotativos')

2 个答案:

答案 0 :(得分:1)

请注意,checkout字段允许使用null值。我猜测对于horas_total字段中带有null的记录,在checkout方法上会引发错误。 先前未引发此错误的原因可能是没有缺少checkout字段的记录。

编辑:对于解决方案,您可以强制checkout字段具有值。或者,您可以检查None

def horas_total(self):
    if self.checkout is None:
        # handle case where there's no value for checkout 
    return math.ceil((self.checkout - self.checkin).total_seconds() / 3600)

答案 1 :(得分:0)

Adersource 答案应该有效,但您可以尝试这样的操作(您收到此错误是因为用户尚未结帐,因此结帐值为 null)-

`def horas_total(self):
     if self.checkout is None:
        # handle case where there's no value for checkout 
        self.checkout = datetime.datetime.now(timezone.utc)
     return math.ceil((self.checkout - self.checkin).total_seconds() / 3600)`

你可能需要根据你的代码稍微调整一下