Выражение содержит смешанные типы: 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. Я использовал поле вывода в функции проверки, но продолжаю получать ту же проблему.