【发布时间】:2022-11-20 23:59:02
【问题描述】:
我得到了这个产品型号:
class Product(models.Model):
quantity = models.DecimalField(max_digits=10, decimal_places=2, default=0)
price = models.DecimalField(max_digits=10, decimal_places=2, default=0)
@property
def value(self):
return F('quantity') * F('price')
当我在产品实例上调用 .value 时,我得到了回报:
product.value // returns 14
但是当我检查条件时:
for product in Product.objects.all():
while (product.value > 0):
...
我收到此错误:
TypeError: '>' not supported between instances of 'CombinedExpression' and 'int'
我还没有找到关于这个问题的现有问题。如何解决?
【问题讨论】:
-
F('quantity') * F('price')在那里毫无意义!?这些用于查询。那应该如何返回14?只是把return self.quantity * self.price放在那里? -
@deceze 在我的另一个问题中,我被指示在这种情况下使用 F() 。根据文档:“F() 对象表示模型字段的值、模型字段的转换值或带注释的列。它可以引用模型字段值并使用它们执行数据库操作,而无需实际拉取它们从数据库中移出到 Python 内存中。”。第二件事:提议的解决方案没有改变任何东西,仍然会抛出同样的错误。
-
@skelaw:不,那是为了数据库表达式,不适用于 Python/Django 层。
标签: django