django - django 在 select_related 字段上进行注释
问题描述
我的简化模型:
class Product(models.Model):
name = models.CharField()
class Price(models.Model):
product = models.OneToOneField('Product', primary_key=True)
value = models.DecimalField()
class Cart(models.Model):
product = models.ForeignKey('Product')
qnt = models.IntegerField()
我需要将两个字段相乘,即存储在其他字段中sum
。为什么 Cart.objects.select_related('product__price').annotate(sum=F('product__price__value') * F('qnt'))
什么都不返回?
替换F('')
为F('value')
返回错误
无法将关键字“值”解析为字段。选项有:cart_id、id、product、product_id、qnt
解决方案
您尝试将整数字段与小数字段相乘。因此,它会发生错误。你可以试试这个
from django.db.models import ExpressionWrapper, F, DecimalField
Cart.objects.select_related('product__price').annotate(
sum= ExpressionWrapper(
F('product__price__value') * F('qnt'), output_field=DecimalField()))
如果您正在组合的字段属于不同类型,您需要告诉 Django 将返回哪种类型的字段。由于 F() 不直接支持 output_field 您将需要使用 ExpressionWrapper 包装表达式
推荐阅读
- reactjs - NextJS:如何验证动态文件夹中的 ID?
- ios - 如何在 iOS 中同时使用自动高度和滚动视图?
- cmake - CMake CPPLINT 彩色输出
- node.js - node.js 护照 - 登录后批准指定路线
- ios - AVPlayer UIButton - 根据流是打开还是关闭显示播放或暂停图像按钮
- java - Keycloak Spring Security Adapter 如何使用公共 Keycloak 客户端验证访问令牌?
- python - 在所有 PC 处理器上并行运行函数 - Python
- azure - 如何获取发布管道中提供的秘密变量的值
- airflow - DAG 仅运行特定任务
- node.js - 根据百分比机会选择级别