返回旧数据的Django覆盖模型保存方法

问题描述 投票:0回答:1

我可能很累,看不到东西,但是尝试了太多。

class Pizza(models.Model):
portion_size = models.ForeignKey('PortionSize', on_delete=models.PROTECT)
pizza_type = models.ForeignKey('PizzaType', on_delete=models.PROTECT)
toppings = models.ManyToManyField('Topping', blank=True)
special = models.BooleanField()
price = models.DecimalField(
    max_digits=4, decimal_places=2, editable=False, default=0
)

def calculate_price(self, topping_amount):
    print(self.toppings.count())
    topping_amount = self.toppings.count()
    base_pizza = PizzaBase.objects.get(
        portion_size=self.portion_size, pizza_type=self.pizza_type,
        special=self.special, topping_amount=topping_amount
    )
    self.price = base_pizza.price

def save(self, *args, **kwargs):
    super().save(*args, **kwargs)
    self.calculate_price()

这是我为Django定义的模型,我试图设置用户保存表单时创建的比萨的价格,但是每次运行代码时,toppings.count值始终在后面。

例如,如果我选择三个浇头,那么在将表单保存到管理面板中之前,只选择了两个浇头,我将获得两个浇头的计算价格。我尝试过更改save方法的顺序,但没有任何改变。我还使用了shell来检查是否有问题,但是在Django shell中,浇头数量一切都很好。我还检查了管理界面,对其进行了多次刷新,清除了缓存,那里的一切似乎都还不错。

我已经开始Signals解决此问题。为post_save()信号创建一个接收器,但尚未对其进行全面测试。

有人知道会发生什么吗?我正在使用SQLite在本地运行此代码,该应用程序仍在开发中,我仅在使用VSCode,其他都没有。

django django-models many-to-many overriding django-orm
1个回答
0
投票

这个问题的答案在这里:https://docs.djangoproject.com/en/3.0/ref/signals/#m2m-changed

保存模型后,将保存多对多关系。所以我建立了一个信号来解决这个问题。

感谢您的帮助!

© www.soinside.com 2019 - 2024. All rights reserved.