Timezone.now覆盖保存方法时引发类型错误

时间:2019-05-12 02:17:30

标签: python django-rest-framework

我正在Django Rest Framework中编写一个API,当使用POST方法创建新对象时,如果“ done”字段为True,而“ done_date”为Null,则我希望“ done_date”自动为设置为当前时间。这是我试图做的,在模型中覆盖了save方法:

在models.py


from django.db import models
from django.utils import timezone


class Task(models.Model):
    title = models.CharField(max_length=100)
    done = models.BooleanField(default=False)
    author_ip = models.GenericIPAddressField()
    created_date = models.DateTimeField(default=timezone.now)
    done_date = models.DateTimeField(null=True, blank=True)

    class Meta:
        ordering = ('id',)

    def __str__(self):
        return '{} - {}'.format(self.pk, self.title)

    def save(self, *args, **kwargs):
        if self.done and not self.done_date:
            self.done_date = timezone.now
        super(Task, self).save(*args, **kwargs)

但是,这在调用Task.objects.create()时会引发“ TypeError。这可能是因为序列化程序类上有一个可写字段,它不是Task.objects.create()的有效参数。您可能需要将字段设置为只读,或覆盖TaskSerializer.create()方法以正确处理此问题。” 现在,我相当确定它与timezone.now有关。现在在save方法中,有人可以建议我如何继续吗?抱歉,这是一个基本问题,谢谢!

1 个答案:

答案 0 :(得分:2)

您要做的就是调用timezone.now()函数(带括号)
或者,您可以使用:auto_now=True并设置editable=True