我有一个包含一些对象的查询集。根据某些情况或其他情况,我现在想排除所有没有特定标签的对象(_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)
其中避免是整数列表。这给我留下了一个问题,即 django-tagging 的 TagField 只是一个特殊的 CharField(或 TextField?)。当然,如果我只是根据整数列表查询它,它不会整理出任何东西。我可以尝试以这样的方式解决这个问题:
for tag in avoid:
self.queryset=self.queryset.exclude(_tags__contains=tag.name)
这不仅丑陋,而且还给我留下了由多个单词组成的标签或匹配其他标签的部分的问题。
不知何故,我怀疑这可以由了解 django-tagging 如何工作的人以更漂亮的方式解决。