【问题标题】:TypeError: '>' not supported between instances of 'CombinedExpression' and 'int'TypeError: \'>\' 在 \'CombinedExpression\' 和 \'int\' 的实例之间不被支持
【发布时间】: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


【解决方案1】:

您直接使用属性:

class Product(models.Model):
    # …

    @property
    def value(self):
        return self.quantity * self.price

您使用 F-expressions [Django-doc] 来表达数据库查询,而不是在 Python/Django 层乘以值。

【讨论】:

  • 在我的另一个问题中,我被指示在这种情况下使用 F() 。在创建这个问题之前,我检查了这个......建议的解决方案没有改变任何东西并且仍然抛出相同的错误。
猜你喜欢
  • 2023-01-10
  • 2020-09-07
  • 2018-09-03
  • 2020-11-13
  • 2021-01-15
  • 2020-06-02
  • 2019-08-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多