У меня есть набор запросов, содержащий несколько объектов. В зависимости от того или иного случая я теперь хочу исключить все объекты без определенных тегов (_tags - это имя TagField на моей модели):
self.queryset=self.queryset.exclude(_tags__id__in=avoid)
Но это просто оставляет меня с ошибкой:
Caught FieldError while rendering:
Join on field '_tags' not permitted.
Did you misspell 'id' for the lookup type?
Поскольку я почти уверен, что не ошибся в «id», я провел некоторый поиск того, как использовать тегирование для чего-то подобного. В документах много о пользовательских менеджерах, но почему-то я просто не могу понять, как я могу использовать их, чтобы получить то, что я хочу.
редактирование:
исправил код выше до
self.queryset=self.queryset.exclude(_tags__in=avoid)
где избежать - список целых чисел. И это оставляет меня с проблемой, что TagField django-tagging - это просто специальный CharField (или TextField?). Который, конечно, не будет ничего сортировать, если я просто запросить его по списку целых чисел. Я мог бы попытаться решить это так:
for tag in avoid:
self.queryset=self.queryset.exclude(_tags__contains=tag.name)
, который не только уродлив, но и оставляет меня с проблемой тегов, составленных из нескольких слов или соответствующих частей других тегов.
У меня почему-то есть подозрение, что кто-то, кто понял, как работает django-tagging, может решить эту проблему намного красивее.