我的简化模型:
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包装表达式