1

post_saveしたがって、最初のモデルが保存されたときに、シグナルトリガー関数を使用して別のモデルのインスタンスを作成しています。

信号をトリガーするモデル:

class Product(models.Model):
    # ...
    colors = models.ManyToManyField(Color)
    sizes = models.ManyToManyField(Size)

そして機能:

def create_skus(instance, **kwargs):
    for color in instance.colors.select_related():
        for size in instance.colors.select_related():
            SKU.objects.get_or_create(product=instance, color=color, size=size)

私の問題は、create_skus毎回post_saveで呼び出す必要があるということですが、2回目以降の保存でしか機能しないようで、ユーザーは製品を2回保存する必要があります。これの起源は何ですか?

編集:これは、これらのM2M関係が追加される方法と関係があると思います(つまりinstance.colors.add(<Color object>)、わかりません。回避策を知っている場合は、永遠にあなたを愛しています。

4

1 に答える 1

2

シグナルは、ColorインスタンスとSizeインスタンスが保存されたときではなく、Productインスタンスが保存されたときに送信されます。したがって、最初の試行では、post_save()関数のProductインスタンスには、Productモデルのsave()メソッドを介して保存されないため、(まだ)ColorインスタンスとSizeインスタンスがありません。

次の2つのリンクを確認してください。

于 2011-05-05T10:55:14.770 に答える