保存信号似乎只在第二次保存或之后触发
所以我在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)
我的问题是每次都应该在post_save上调用create_skus
,但似乎只能在第二次保存或之后进行,导致用户必须两次保存产品。 这是什么来源?
编辑 :我认为这与如何添加这些M2M关系有关( instance.colors.add(<Color object>)
但我不确定,如果您知道解决方法,我会永远爱你。
保存产品实例时发送信号,而不是在保存颜色和大小实例时发送。 因此,第一次尝试时,您的post_save()函数的Product实例将不具有Color和Size实例,因为它们不是通过Product model的save()方法保存的。
看看这两个链接:
上一篇: save signal seemingly triggered only on 2nd save or after
下一篇: Why can't I use