如何创建生成/计算列Postgres/Django?
我尝试了两种方式:
(1)按类:
class Product(models.Model):
name = models.CharField(max_length=200, null=True)
precio_costo = models.FloatField(null=True)
cantidad = models.IntegerField(null=True)
monto_stock = models.FloatField(
always_generated='precio_costo * cantidad', stored=True)
我得到的错误:
TypeError:init()获取了意外的关键字参数“always_generated”
(2)Postgres管理员
但我不能更新或添加新字段,Django需要默认值。
2条答案
按热度按时间fafcakar1#
您真的需要将结果
monto_stock
存储在数据库中吗?如果没有,那么可以在类上使用Python方法/属性:
如果是,那么可以用模型
save()
方法计算结果:小心点:您的字段允许NULL,因此如果任何字段实际上包含值NULL,则会出现错误(因为您无法在Python中执行NULL/None乘法)。
这些选项中有一个对你有用吗?
编辑:在选项1的情况下,要在视图中使用属性
monto_stock
,您可以像访问模型的任何其他属性一样简单地访问它(但它将是只读的)。举例来说:请注意,因为它是一个Python类属性,而不是一个DB字段,所以它不能直接用于数据库查询。
ukxgm1gy2#
我也在django项目网站上找到了always_generated解决方案。在尝试了这么多方法之后,终于有一种方法适合我。
这只是REMOVE或COMMENT所有来自models.py的具有db触发器的列条目。例如:-自动递增列,当前时间戳列,生成为列等。
所以我注解了这两行,它就像预期的那样工作了。创建示例时也不需要传递任何东西到保存记录。