我有一个看起来像这样的模型:
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在添加每个成分后都会重新计算。
还有其他想法可以使这项工作吗?