如何在django admin中基于另一个字段的查找设置字段值?

时间:2019-01-27 09:49:48

标签: django

我想获取所选产品的产品价格,并在Order_line中将其设置为价格。

update PRACOWNICY
set Zarobki = CASE
               when Zarobki < 3000
                then Zarobki * 2
               else
                then Zarobki / 2
              END

1 个答案:

答案 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等...在何处保存它们,以及将一个表字段链接到另一个表字段是否是超出原始问题的范围。。 >