我可能很累,看不到东西,但是尝试了太多。
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,其他都没有。
这个问题的答案在这里:https://docs.djangoproject.com/en/3.0/ref/signals/#m2m-changed
保存模型后,将保存多对多关系。所以我建立了一个信号来解决这个问题。
感谢您的帮助!