在Django中更新父模型的auto_now DateTimeField

14 投票
3 回答
2636 浏览
提问于 2025-04-10 23:14

我有两个模型:Message(消息)和 Attachment(附件)。每个附件都和特定的消息关联,Attachment 模型里用一个叫 ForeignKey 的东西来表示这种关系。两个模型都有一个自动更新的时间字段,叫做 updated。我的想法是,当任何一个附件被保存时,也能把关联的消息的 updated 字段更新为当前时间。以下是我的代码:

def save(self):
    super(Attachment, self).save()
    self.message.updated = self.updated

这样做行不行?如果可以的话,能给我解释一下为什么吗?如果不行,我该怎么做呢?

3 个回答

1

带有 auto_now 的日期时间字段在你调用 save() 的时候会自动更新,所以你不需要手动去更新它们。Django 会为你处理这些事情。

7

正确的版本是:注意最后一行 self.message.save()

class Message(models.Model):
    updated = models.DateTimeField(auto_now = True)
    ...

class Attachment(models.Model):
    updated = models.DateTimeField(auto_now = True)
    message = models.ForeignKey(Message)

    def save(self):
        super(Attachment, self).save()
        self.message.save()
12

你还需要把消息保存下来。这样就应该可以正常工作了。

撰写回答