Django m2m_changed信号,带有附加模型

时间:2018-06-25 09:09:48

标签: django django-models django-signals

我有一个看起来像这样的模型:

class Recipe(models.Model):
    name = models.CharField(_('Name'))
    components = models.ManyToManyField(RecipeComponent, through='alchemy.RecipeComposition')
    total_weight = models.FloatField(_('How much recipe will weight'))

class RecipeComponent(models.Model):
    name = models.CharField(_('Name'))

class RecipeComposition(models.Model):
    recipe = models.ForeignKey(Recipe, on_delete=models.CASCADE)
    component = models.ForeignKey(RecipeComponent, on_delete=models.CASCADE)
    number = models.FloatField(_('Defines how much of the component you need'), default=1)

在RecipeComposition中进行任何更新后,我必须对配方进行一些计算(例如,总重量)。

不幸的是,尝试这样做没有帮助:

@receiver(m2m_changed, sender=Recipe.components.through, weak=False)
def recipe_components_changed(sender, **kwargs):
    print("meow >^-_-^<")
    # some calculations for recipe.total_weight here

发现了question,但存在相同的问题,但是它已经很旧了(3年以前)并且没有正确的答案。有一个指向ticket 17688的链接已在6年前打开,但仍未解决。

我不想这样使用post_save:

@receiver(post_save, sender=RecipeComposition)

因为在这种情况下,新配方创建的total_weight在添加每个成分后都会重新计算。

还有其他想法可以使这项工作吗?

0 个答案:

没有答案