いくつかのオブジェクトを含むクエリセットがあります。場合によっては、特定のタグのないすべてのオブジェクトを除外したい場合があります(_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)
ここで、avoidは整数のリストです。そして、それはdjango-taggingのTagFieldが単なる特別なCharField(またはTextField?)であるという問題を私に残します。もちろん、整数のリストに対してクエリを実行しただけでは、何も分類されません。私はこれを次のように解決しようとすることができます:
for tag in avoid:
self.queryset=self.queryset.exclude(_tags__contains=tag.name)
これは醜いだけでなく、複数の単語で構成されたタグや他のタグの一部と一致するという問題も抱えています。
私はどういうわけか、これはdjangoのタグ付けがどのように機能するかを理解している誰かによってはるかにきれいな方法で解決できるのではないかと疑っています。