Выражение содержит смешанные типы: SmallIntegerField, BigIntegerField. Вы должны установить поле output_field - PullRequest
1 голос
/ 28 марта 2020

Я создаю модель в django Я хочу установить значение month_wage в поле Month_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

this повышение ошибки:

Выражение содержит смешанные типы: SmallIntegerField, BigIntegerField. Вы должны установить поле output_field.

Как я могу это исправить

1 Ответ

0 голосов
/ 28 марта 2020

Вы устанавливаете output_field с ExpressionWrapper [Django -doc] , например:

from django.db.models import BigIntegerField, ExpressionWrapper

class DetailsList(models.Model):
    # …
    objects = AnnotationManager(
        monthly_wage=<b>ExpressionWrapper(</b>
            F('working_days') * F('daily_wage'),
            output_field=BigIntegerField()
        <b>)</b>
    )
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...