djangoのpost_save/pre_save信号を把握するのに苦労しています。Djangoのpre_save/post_saveデータを変更する
私のモデルにstatus
というフィールドがあり、このモデルへのエントリが追加/保存されると、それに応じてステータスが変更される必要があります。
私のモデルは次のようになります。
class Ticket(models.Model):
(...)
status = models.CharField(max_length=1,choices=OFFERT_STATUS, default='O')
そしてpre_save用に設定私のシグナルハンドラ、:今すぐ
def ticket_handler(sender, **kwargs):
ticket = kwargs['instance']
(...)
if someOtherCondition:
ticket.status = 'C'
、私はticket.save()
ちょうどこの最後の行を怒鳴るif
文がある置けば何が起こりますかこのアクションは信号そのものを呼び出すため、大きな反復ブラックホールです。そして、この問題はpre_save
とpost_save
の両方で発生します。
まあ...私はそれを保存する前(または後に)エントリを変更する能力は、djangoの世界ではかなり一般的だと思います。それで、私はここで間違っていますか?信号は間違ったアプローチですか、私はここで何か他のものを見逃していますか?
また、このpre_save/post_save関数がトリガーされると、別のモデルのインスタンスにアクセスし、その特定の行エントリを変更することは可能でしょうか?
おかげ
最後の段落で説明したこのケースでも、他のモデルのエントリにアクセスして変更したいですか? – Rodrogo
それは信号が良いアプローチです、あなたのモデルはよりデカップリングされます –
私はまた、保存後のアクションのための信号を使用します。私はモデルにすでにIDを持っている必要があります(例えば、オブジェクトIDのハッシュに基づくキーである他のフィールドを計算するためにIDを使用する場合) –