Django 重写模型保存方法返回旧数据
Django overriden model save method returning old data
我可能累了,什么也没看到,但我已经尝试了太多。
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价值总是落后。
例如,如果我选择了三种配料,并且在管理面板中保存表单之前只选择了两种配料,我会得到两种配料的计算价格。我试过更改保存方法的顺序,但没有任何改变。我还使用 shell 检查是否有问题,但是在 Django shell 中,浇头计数一切正常。我还检查了管理界面,多次刷新它,清除了缓存,那里似乎一切都很好。
我已经启动 Signals 来解决这个问题。正在为 post_save() 信号创建接收器,但尚未对其进行全面测试。
有人知道会发生什么吗?我正在 运行 在本地使用 SQLite 编写此代码,该应用程序仍在开发中,我只使用 VSCode,没有别的。
这个问题的答案在这里:https://docs.djangoproject.com/en/3.0/ref/signals/#m2m-changed
保存模型后保存多对多关系。所以我建立了一个信号来解决这个问题。
感谢您的帮助!
我可能累了,什么也没看到,但我已经尝试了太多。
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价值总是落后。
例如,如果我选择了三种配料,并且在管理面板中保存表单之前只选择了两种配料,我会得到两种配料的计算价格。我试过更改保存方法的顺序,但没有任何改变。我还使用 shell 检查是否有问题,但是在 Django shell 中,浇头计数一切正常。我还检查了管理界面,多次刷新它,清除了缓存,那里似乎一切都很好。
我已经启动 Signals 来解决这个问题。正在为 post_save() 信号创建接收器,但尚未对其进行全面测试。
有人知道会发生什么吗?我正在 运行 在本地使用 SQLite 编写此代码,该应用程序仍在开发中,我只使用 VSCode,没有别的。
这个问题的答案在这里:https://docs.djangoproject.com/en/3.0/ref/signals/#m2m-changed
保存模型后保存多对多关系。所以我建立了一个信号来解决这个问题。
感谢您的帮助!