django - Django 模型字段依赖于另一个模型字段
问题描述
我有一般性问题。假设我有一个模型字段,它是不同模型中其他两个字段的总和。
我很难实现这一点。让我们看下面的例子
模型 1 字段 1 字段 2
模型 1 中的模型 2 字段 3(依赖于字段 1 和字段 2)
如果我将它作为我的 webapp 中特定页面的一部分。这意味着如果 field1 或 field2 已更改,但该人没有访问汇总值并在 field3 中更新它的页面,则 field3 将携带不正确的值。
我设法确定解决此类问题的唯一方法是永远不要创建 field3。每次求和(或任何其他依赖于其他字段的操作)占位时,都将在 view.py 内的变量中完成
这意味着每次需要时都要计算该值。
这样我就不会忘记重新计算 field3 的值。
我的问题是这是最好的方法吗?有没有一种方法可以在不需要访问特定页面的情况下,每当诸如 field1 之类的依赖字段更改时自动更改 field3 ?
我尝试了 field3 的外键,并尝试在 model.py 中添加两个外键的值,但我认为这是不允许的。
字段 3 = 字段 1+ 字段 2
有什么建议么?
**
- 根据请求添加以下示例以进一步澄清问题
如果您注意到交易表下的 totalPrice 是基于商品和运费的价格。但是,这需要访问 order.html 页面。
我的问题是是否有人更改了导致价格不同的商品。然后不访问 order.html 页面,交易表中的总价格将不会反映新价格。如果它所依赖的任何其他字段被更新而无需访问 order.html 页面,是否有办法以更新总价格的方式构建“交易”模型?
**
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')
解决方案
您可以覆盖 Shipping 和 Item 模型中的保存功能。
def save(self, *args, **kwargs):
#change total_price
# Transaction.save(update_fields['total_price'])
super(Item, self).save(*args, **kwargs)
但是“#change total_price”将取决于您将如何关联模型以及如何找到合适的 Shipping 对象
推荐阅读
- python - opencv-ModuleNotFoundError:Spyder python 提示中没有名为“cv2”的模块
- perl - 如何打印第一个不同值的标量值
- c# - 将 LINQ 返回值转换为二维数组
- mysql - ReactJS,如何在显示数据库中的文本区域时编辑文本区域并更新值?
- r - 重新编辑:塑造不平衡面板数据以运行混合多项式回归的问题
- matlab - 如何绘制在 matlab 中选择的可变步长 ODE 求解器?
- python - 逐行格式化熊猫数据框
- javascript - 类型错误:CSL.Attributes[attrname] 未定义
- ssl - PHPMailer 验证对等 SSL
- apache-nifi - NIFI:将 SQL 查询中的每月转储作为 CSV 文件提取到 SFTP 服务器中