TypeError: QuerySet.annotate() получил невыражение(я): <django.db.models.fields.IntegerField>.
Я пытаюсь создать пользовательский метод менеджера, который аннотирует QuerySet модели Tag. Цель этого - подсчитать, сколько раз тег встречается во всех вопросах, заданных пользователем.
Однако при этом возникает следующая ошибка: TypeError: QuerySet.annotate() received non-expression(s): <django.db.models.fields.IntegerField>
. Это происходит после получения другой ошибки: django.core.exceptions.FieldError: Cannot resolve expression type, unknown output_field
.
По следующей ссылке рассматривается ошибка FieldError, которая была у меня первоначально; предоставленный ответ не устранил ошибку, поскольку теперь она вызывает ошибку TypeError.
Как это можно исправить, чтобы ни одна из ошибок не возникала?
class TagManager(Manager):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
def count(self, profile):
user_questions = Question.objects.filter(profile=profile)
return self.model.objects.filter(
name__in=set(user_questions.values_list("tags", flat=True))
).annotate(posts=Subquery(user_questions.filter(
tags__name=OuterRef("name")
).count()), output_field=IntegerField()).order_by("-posts")
class Tag(Model):
name = CharField(unique=True, max_length=25)
objects = Manager()
postings = TagManager()
class Meta:
default_manager_name = "objects"
class Post(Model):
body = TextField()
date = DateField(default=date.today)
comment = ForeignKey('Comment', on_delete=CASCADE, null=True)
profile = ForeignKey(
'authors.Profile', on_delete=SET_NULL, null=True,
related_name='%(class)ss',
related_query_name="%(class)s"
)
score = GenericRelation(
'Vote', related_query_name="%(class)s"
)
class Meta:
abstract = True
class Question(Post):
title = CharField(max_length=75)
tags = ManyToManyField(
'Tag', related_name="questions", related_query_name="question"
)