你好,我正在开发一个博客应用程序,我有一个模型:
class Post(models.Model):
title = models.CharField(max_length=255)
<..>
is_published = models.BooleanField(default=False)
time_publish = models.DateTimeField()
time_edit = models.DateTimeField(auto_now=True)
time_create = models.DateTimeField(auto_now_add=True)
我想设置,当用户设置is_published=True
并且调用.save()
时,time_publish将保存当前时间。
问题是我不知道该走哪条路。覆盖.save()
或者用信号做什么?我将感谢一些文档链接。
很抱歉,如果它是不准确的,但我不知道这个问题应该怎么命名。
更新:
所以多亏了manji,我制作了这个代码,它可以工作:
def save(self, *args, **kwargs):
if self.pk is not None:
orig = Post.objects.get(pk=self.pk)
if not orig.time_publish and self.is_published:
self.time_publish = datetime.now()
elif not self.is_published:
self.time_publish = None
super(Post, self).save(*args, **kwargs)
最简单的解决方案(与django兼容)是覆盖模型的save
方法。
class Post(models.Model):
...
def save(self, *args, **kwargs):
if self.is_published:
self.time_publish = datetime.now() # don't forget import datetime
super(Post, self).save(*args, **kwargs)
...
此处的更多信息:覆盖预定义的模型方法