モデル内の関連フィールドの検証を行うのに適切な時期はいつですか?
たとえばManyToMany
、クラスのプレイリストと関係があるクラスのビデオがある場合、ビデオが「プライベート」に変更されると、すべてのプレイリストから削除する必要があります。
モデルのclean()
メソッドでこれを行うのは危険に思えます - モデルは検証に失敗して保存されない可能性がありますが、プレイリストの参照は削除されます。
post_save
または信号でそれを行うpre_save
のは正しい方法ですか?
モデル内の関連フィールドの検証を行うのに適切な時期はいつですか?
たとえばManyToMany
、クラスのプレイリストと関係があるクラスのビデオがある場合、ビデオが「プライベート」に変更されると、すべてのプレイリストから削除する必要があります。
モデルのclean()
メソッドでこれを行うのは危険に思えます - モデルは検証に失敗して保存されない可能性がありますが、プレイリストの参照は削除されます。
post_save
または信号でそれを行うpre_save
のは正しい方法ですか?
次の 2 つの選択肢があります。
最初のものはpost_save
、仕事をする信号を使用しています。ではありませんpre_save
。保存が失敗する可能性があり、保存が正しく機能した場合にのみそれを実行したいと思うからです。
save()
他のオプションは、次のようなモデルのメソッドをオーバーライドすることです:
def save(self, *args, **kwargs):
super(MyModel, self).save(*args, **kwargs)
# do stuff for removing whatever you want to remove
あなたはさまざまなモデルを扱っているので、私の個人的な選択は最初のものです。現在の 1 つだけを処理する必要がある場合は、2 つ目の処理を行います。しかし、それは単なる個人的な考えです。