2

シンプルなチャットアプリがあります。

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 オブジェクトが作成されるたびに、Thread モデルの last_message_time を、作成されたばかりの NewMessage オブジェクトの日時で更新したいと考えています。どうすればこれを行うことができますか?

4

1 に答える 1

4

最も簡単な方法は、おそらく のpost_saveシグナル ハンドラを使用すること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メソッドを使用することもできますNewMessage

于 2013-11-06T20:37:02.780 に答える