表达式包含混合类型:SmallIntegerField、BigIntegerField.必须设置output_field



我在django中创建了一个模型我想在注释中将monthly_page设置为monthly_wage=working_days*daily_wage

from django.db.models import F

class AnnotationManager(models.Manager):
def __init__(self, **kwargs):
super().__init__()
self.annotations = kwargs
def get_queryset(self):
return super().get_queryset().annotate(**self.annotations)


class DetailsList(models.Model):

month_list=models.ForeignKey('MonthList',on_delete=models.CASCADE,verbose_name='لیست ماهانه  ') 
worker=models.ForeignKey('Workers',on_delete=models.CASCADE,verbose_name=' نام کارگر')
working_days=models.SmallIntegerField('تعداد روز کارکرد')
daily_wage=models.BigIntegerField('دستمزد روزانه')
advantage=models.BigIntegerField('مزایای ماهانه')
_monthly_wage=0
objects = AnnotationManager(
monthly_wage=F('working_days') * F('daily_wage')

)

但因为working_days是smallinteger,而daily_wage是biginteger

此错误引发:

Expression包含混合类型:SmallIntegerField、BigIntegerField。必须设置output_field。

如何修复此

设置output_field,使用ExpressionWrapper[Django-doc],例如:

from django.db.models import BigIntegerField, ExpressionWrapper
class DetailsList(models.Model):
# …
objects = AnnotationManager(
monthly_wage=ExpressionWrapper(
F('working_days') * F('daily_wage'),
output_field=BigIntegerField()
)
)

最新更新