我有一个普遍的问题。假设我有一个模型字段,该字段是不同模型中其他两个字段的总和。
我很难实现这一目标。 让我们来看下面的例子
模型1 栏位1 field2
model2 模型1中的field3(取决于field1和field2)
如果我将其作为webapp中特定页面的一部分进行操作。这意味着,如果field1或field2已更改,但该人没有访问汇总该值并在field3中进行更新的页面,则field3将携带错误的值。
解决这个我设法确定的问题的唯一方法是永远不要创建field3。每次求和(或任何其他依赖于其他字段的操作)发生时,都应在view.py
中的变量中进行。这意味着每次需要计算值。
这样,我就不会陷入忘记重新计算field3值的位置。
我的问题是这是最好的方法吗?有没有一种方法,只要有变化的字段(例如field1)发生更改,而无需访问特定页面,该字段便会自动更改field3?
我尝试了使用field3的foriegn键进行某些操作,并尝试在model.py中添加两个foriegn键的值,但我认为这是不允许的。
field3 =字段1+字段2
有什么建议吗?
**
如果您注意到交易表下的totalPrice基于物料和运输的价格。但是,这需要访问order.html页面。
我的问题是,是否有人更改了导致价格不同的商品。然后,如果不访问order.html页面,交易表中的totalprice将不会反映新价格。是否有一种方法可以构建“交易”模型,从而在不需要访问order.html页面的情况下更新其依赖的其他任何字段的情况下,可以更新totalprice?
**
models.py
class Item(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
price = models.FloatField(null=True)
class Shipping(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
price = models.FloatField(null=True)
class Transaction(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True)
total_price = models.FloatField(null=True)
views.py
def order(request):
item_obj = item.object.get(user=self.user)
ship_obj = shipping.object.get(user=self.user)
trans_obj = transaction.object.get(user=self.user)
trans_obj.total_price = item_obj.price + ship_obj.price
trans_obj.save()
return render(request, 'order.html')
答案 0 :(得分:0)
您可以在运输和项目模型中覆盖保存功能。
def save(self, *args, **kwargs):
#change total_price
# Transaction.save(update_fields['total_price'])
super(Item, self).save(*args, **kwargs)
但是,“#change total_price”将取决于您如何关联模型以及如何找到合适的运输对象