我想获取所选产品的产品价格,并在Order_line中将其设置为价格。
update PRACOWNICY
set Zarobki = CASE
when Zarobki < 3000
then Zarobki * 2
else
then Zarobki / 2
END
答案 0 :(得分:0)
您应该做的是覆盖 Order_line Model 的 save()方法,如下所示:
class Order_line(models.Model):
order = models.ForeignKey('Order', on_delete=models.CASCADE)
category = models.ForeignKey('Category', on_delete=models.CASCADE)
product = models.ForeignKey('Product', on_delete=models.CASCADE)
price = models.DecimalField(max_digits=10, decimal_places=2)
def save(self, *args, **kwargs):
if self.price is None:
self.price = self.product.price
super(Order_line, self).save(*args, **kwargs)
由于self.price
的值将始终等于self.product.price
。
有关此文档的更多信息,请参见
https://docs.djangoproject.com/en/2.0/topics/db/models/#overriding-predefined-model-methods
我希望这会对您有所帮助。
更新
现在,按照您的评论,您现在意识到,如果同时将产品价格保存在更多表中,则上述原始安排(您的)不会引起什么麻烦。你是对的。通过这种方法,您在问题中所提出的内容只能在产品表中(而不是在Order_line表中)编辑产品价格。但是,这种设计(在两个表中保存相同的值)相对来说是多余的,因为在您的代码中您总是可以从产品表中获取产品价格(产品模型),所以我建议不要保存产品价格在两个表中。只用一次,您将始终可以在一处编辑价格,并且可以在任何地方的代码中根据需要来自产品模型。带有以下几行代码:
def get_price(part_number):
product_part_number = part_number
obj = Product.objects.get(part_number=product_part_number)
product_part_price = getattr(obj, price)
# do whatever you want with this value, save or display anywhere
return product_part_price
但是,如果您也有特定的原因将产品价格保存在另一个表中(例如,对于每个订单),那么上述解决方案就是一个最佳解决方案,即产品价格始终基于产品表上的产品价格。功能可以扩展和修改
当您开始使用产品构建项目时,可能存在无数个问题,关于如何更好地存储此类数据。例如,您将没有一个,但会有更多的产品价格。您将拥有base_product_price,special_product_price,wholesale_product_price等...在何处保存它们,以及将一个表字段链接到另一个表字段是否是超出原始问题的范围。。 >