我有 3 个模型,TaggedObject 与 ObjectTagBridge 有一个 GenericRelation。ObjectTagBridge 具有标记模型的 ForeignKey。
class TaggedObject(models.Model):
"""
class that represent a tagged object
"""
tags = generic.GenericRelation('ObjectTagBridge',
blank=True, null=True)
class ObjectTagBridge(models.Model):
"""
Help to connect a generic object to a Tag.
"""
# pylint: disable-msg=W0232,R0903
content_type = models.ForeignKey(ContentType)
object_id = models.PositiveIntegerField()
content_object = generic.GenericForeignKey('content_type', 'object_id')
tag = models.ForeignKey('Tag')
class Tag(models.Model):
...
当我将标签附加到对象时,我正在创建一个新的 ObjectTagBridge 并将其 ForeignKey 标签设置为我要附加的标签。这很好,我可以很容易地获得我附加到我的对象的所有标签。但是当我想获取(过滤)所有具有 Tag1 和 Tag2 的对象时,我尝试了这样的事情:
query = Q(tags__tag=Tag1) & Q(tags__tag=Tag2)
object_list = TaggedObjects.filter(query)
但是现在我的 object_list 是空的,因为它正在寻找具有一个 ObjectTagBridge 和 2 个标记对象的 TaggedObjects,第一个带有 Tag1,第二个带有 Tag2。
我的应用程序将比这个更复杂的 Q 查询,所以我认为我需要一个带有这个 Q 对象的解决方案。事实上,二元连词的任意组合,例如:(...) and ( (...) or not(...))
如何正确过滤?欢迎每个答案,也许还有一种不同的方法可以做到这一点。
谢谢你的帮助!!!