私はいくつかのオブジェクトを含むクエリーセットを持っています。いくつかのケースまたはその他によって私は今(_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が特別なCharField(またはTextField?)にすぎないという問題が残されています。私が整数のリストと照らし合わせて照会するだけでは、何も並べ替えることはできません。
for tag in avoid:
self.queryset=self.queryset.exclude(_tags__contains=tag.name)
だけでなく醜いですが、また、複数の単語または他のタグのマッチング部品で作られたタグの問題を私に残します:私はこのような方法でこれを解決しようとすることができます。
私は何とか、これは、ジャンゴタギングの仕組みを理解している人によって、はるかにきれいに解決できるという疑いがあります。
また、テンプレート内の_tagsフィールドに直接アクセスすることはできません。アンダースコアで始まるフィールド名は使用できません。私はアンダースコアで名前を始めることをお勧めしません。 – Mikael
あなたの素早い答えに感謝します。あなたは質問の引数については絶対に妥当でしたが、それは私の問題を解決するものではありません。 _tagsは、モデルにtagsという名前のプロパティがあるため、テンプレートからアクセスするほうがはるかに簡単です; – marue