使用模型表达式将Django模型中的整数和小数相乘
我是Django初学者,在我的一个项目中,我制作了以下模型:使用模型表达式将Django模型中的整数和小数相乘,django,django-models,query-expressions,Django,Django Models,Query Expressions,我是Django初学者,在我的一个项目中,我制作了以下模型: class Piece(models.Model): order = models.ForeignKey(Order,on_delete=models.CASCADE) coil = models.ForeignKey(Cut_Material ,on_delete=models.CASCADE) piece_length = models.DecimalField(max_digits=4, dec
class Piece(models.Model):
order = models.ForeignKey(Order,on_delete=models.CASCADE)
coil = models.ForeignKey(Cut_Material ,on_delete=models.CASCADE)
piece_length = models.DecimalField(max_digits=4, decimal_places=2)
prime_pieces = models.IntegerField()
reject_pieces = models.IntegerField()
def __str__(self):
return (str(self.piece_length))
class Meta:
ordering = ["-order","piece_length"]
我想用piece\u length
与prime\u pieces
相乘,得到运行的仪表,以下是我的解决方案:
解决方案1:
解决方案:Piece.objects.annotation(运行米=(F('Piece\u length')*F('prime\u pieces'))
错误:类型错误:QuerySet.aggregate()接收到非表达式:。
解决方案2
解决方案:Piece.objects.annotation(运行米=(F('Piece\u length')*F('prime\u pieces')),output\u field=FloatField())
错误:类型错误:QuerySet.aggregate()接收到非表达式:。
有人能帮我解决问题吗?使用:
(添加了格式),您只需尝试创建一个额外的注释output\u field
,该注释映射到一个FloatField
这里需要的是一个,output\u字段=…
是ExpressionWrapper
的一个参数:
from django.db.models import ExpressionWrapper
Piece.objects.annotate(
running_meters=ExpressionWrapper(
F('piece_length') * F('prime_pieces'),
output_field=FloatField()
)
)
从django.db.models导入ExpressionWrapper
工件.objects.annotate(
运行米=表达式包装器(
F(‘工件长度’)*F(‘基本工件’),
输出\字段=浮动字段()
)
)
谢谢,它很有效!
from django.db.models import ExpressionWrapper
Piece.objects.annotate(
running_meters=ExpressionWrapper(
F('piece_length') * F('prime_pieces'),
output_field=FloatField()
)
)