3

特定のモデルを保存した後、いくつかのデータベース テーブルを更新する必要があります。@receiver(post_saveこれにはデコレータを使用しました。ただし、このデコレータ関数では、値はまだデータベースに保存されていません。1対多の関係がありますが、を使用して保存されている現在のインスタンスを取得すると、kwargs['instance']子オブジェクトがありません。しかし、シェルからチェックしたときに保存した後、子オブジェクトがあります。以下は私が使用しているコードです:

@receiver(post_save, sender=Test)
def do_something(sender, **kwargs):
    test = kwargs['instance']
    users = User.objects.filter(tags__in=test.tags.values_list('id',flat=True))
    for user in users:
        other_model = OtherModel(user=user, test=test, is_new=True)
        other_model.save()
4

2 に答える 2

3

post_save は、Model.save(() によって呼び出される Model.save_base() の最後に送信されます。つまり、モデルの save() メソッドをオーバーライドすると、super(YourModel, self) を呼び出したときに post_save が送信されます。 .save(*引数、**kw)。

Tag が Test に ForeignKey を持ち、Test インスタンスが作成されたばかりの場合、この段階で Test インスタンスに関連する Tag インスタンスを期待することはできません。も救われる。

于 2012-06-25T11:00:57.100 に答える
0

親インスタンスが保存されると、親インスタンスの post_save が呼び出されます。その後に子が追加された場合、親の post_save が呼び出された時点では存在しません。

于 2012-06-25T10:54:25.950 に答える