我正在Django Rest Framework中编写一个API,当使用POST方法创建新对象时,如果“ done”字段为True,而“ done_date”为Null,则我希望“ done_date”自动为设置为当前时间。这是我试图做的,在模型中覆盖了save方法:
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方法中,有人可以建议我如何继续吗?抱歉,这是一个基本问题,谢谢!
答案 0 :(得分:2)
您要做的就是调用timezone.now()
函数(带括号)
或者,您可以使用:auto_now=True
并设置editable=True