Выражение содержит смешанные типы: FloatField, IntegerField. Вы должны установить output_field в django annotate

У меня возникла такая проблема при использовании annotate. Мне нужно подсчитать количество и преобразовать его в проценты с помощью annotate. Также мне нужно проверить, не должен ли делитель быть нулевым. Кроме того, я использовал все реакции в floafield.

Мой код в представлении:

else:
     articles = Articles.objects.filter(creator=user).annotate(total_reacts=Count('article_reacts')/1.0,
                                                           bad_reacts=Coalesce(check(100.0*Count('article_reacts',filter=Q(article_reacts__reacts=1))/Count('article_reacts')/1.0,'total_reacts'),0.0),
                                                           good_reacts=Coalesce(check(100.0*Count('article_reacts',filter=Q(article_reacts__reacts=2))/Count('article_reacts')/1.0,'total_reacts'),0.0),
                                                           informative_reacts=Coalesce(check(100.0*Count('article_reacts',filter=Q(article_reacts__reacts=3))/Count('article_reacts')/1.0,'total_reacts'),0.0),)

Моя проверочная функция:

dummy_divisor = 1.0
def check(result, divisor):

    return Case(
        When(**{
            divisor: 0.0,
            'then': Value(dummy_divisor, FloatField()),
        }),
        default=result,
        output_field=FloatField(),
    )

В локальном режиме он работает, но эта проблема возникает только на производстве. Кроме того, это не совсем корректно. Он также работает, когда я ставлю dummy_divisor = None в local, но не работает в prod, либо None, либо 1.0. Я использовал поле вывода в функции проверки, но продолжаю получать ту же проблему.

Вернуться на верх