所以我在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>)
,但我不确定,如果你知道一种解决方法,我'永远爱你。
答案 0 :(得分:2)
保存产品实例时发送信号,而不是保存颜色和大小实例时发送信号。因此,在第一次尝试时,post_save()函数的Product实例将不会(还)具有Color和Size实例,因为它们不是通过Product模型的save()方法保存的。
查看以下两个链接: