0

特定のモデルが作成されたときにwebsocketを通じてメッセージを送信するdjango appを作成しています。モデルがdjango-rest-frameworkで保存を完了したときのシグナル

私のモデルは次のようになります。

class Notification(model.Model): 
    owner = models.ForeignKey(User) 
    datetime = models.DateTimeField(auto_now_add=True) 
    resources = models.ManyToManyField(Resource, related_name='notifications', blank=True) 
    recipients = models.ManyToManyField(User, related_name='notifications', blank=True) 

私は、モデルが保存完了したときに信号を送りたいです。 m2m_changedシグナルを使用すると、m2mフィールドを空白のままにしてもシグナルは呼び出されません。フィールドが空でない場合でも、私はm2m_changedを両方のリレーションにバインドする必要があり、これによってwebsocket経由で複数のメッセージが送信されます。 post_saveを使用した場合、m2m_fieldはpost_saveレシーバー内で空です。

その他のオプションはありますか?

私はカスタム信号を書こうとしましたが、私はジャンゴの専門家ではないので、モデルがいつ保存されるのかを知る方法はありません。

ありがとうございました

+0

['on_commit'](https://docs.djangoproject.com/en/1.10/topics/db/transactions/#performing-actions-after-commit)が役立つかもしれません。 –

+0

しかし、それはデータベースのすべての書き込みで呼び出され、コールバック関数には、少なくともどのオブジェクトが保存されているかを示す引数はありません。 –

+0

保存後、インスタンス変数にアクセスしようとしましたか? M2M変数を含む必要があります。 –

答えて

0

モデル信号を書くことはそれほど進んでいない/難しいことではありません。ここにはdocsに従ってください。モデルの保存関数をオーバーライドしてカスタム信号を送信します。

# in Notification class 
def save(self, *args, **kwargs): 
    super(Notification, self).save(*args, **kwargs) 
    # model and m2m fields are updated now 
    my_signal.send(*some_args, **some_kwargs) 

希望すると助かります!

関連する問題