Django:如何在对象创建期间更新另一个模型的字段

时间:2013-11-06 20:33:24

标签: python django

我有一个简单的聊天应用。

class Thread(models.Model):
     participants = models.ManyToManyField(User)
     last_message_time = models.DateTimeField(null=True, blank=True)

class NewMessage(models.Model):
     message = models.CharField(max_length=500)
     sender = models.ForeignKey(User)
     thread = models.ForeignKey(Thread, related_name = 'thread_to_message')
     datetime = models.DateTimeField(auto_now_add=True)

每次创建NewMessage对象时,我都希望使用刚创建的NewMessage对象中的datetime更新Thread模型中的last_message_time。我怎么能这样做呢?

1 个答案:

答案 0 :(得分:3)

最简单的方法可能是post_save的{​​{1}}信号处理程序。

NewMessage

您还可以在from django.db.models.signals import post_save def update_thread(sender, **kwargs): instance = kwargs['instance'] created = kwargs['created'] raw = kwargs['raw'] if created and not raw: instance.thread.last_message_time = instance.datetime instance.thread.save() post_save.connect(update_thread, sender=NewMessage) 上使用自定义save方法。