3 개의 모델이 있으며 TaggedObject에는 ObjectTagBridge가있는 GenericRelation이 있습니다. ObjectTagBridge에는 태그 모델에 대한 ForeignKey가 있습니다. Many2Many/Generic 관계를 Q와 올바르게 필터링하는 방법은 무엇입니까?
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을 만들고 내가 첨부 할 태그에의 외래 키 태그를 설정하고있다. 그게 잘 작동하고, 나는 아주 쉽게 내 개체에 첨부 된 모든 태그를 얻을 수 있습니다. 하지만 TAG1과 TAG2있는 모든 개체 (필터)를 취득 할 때 나는 이런 식으로 뭔가를 시도 :query = Q(tags__tag=Tag1) & Q(tags__tag=Tag2)
object_list = TaggedObjects.filter(query)
있지만이 태그로 한 ObjectTagBridge이 TaggedObjects을 찾고 있기 때문에 지금 내 object_list은 비어 첫 번째는 Tag1이고 두 번째는 Tag2입니다.
내 응용 프로그램은이 질문보다 더 복잡한 Q 쿼리가 될 것이므로이 Q 개체와 함께 솔루션이 필요하다고 생각합니다. 실제로 같은 이진 연결자의 모든 조합 : (...) and ((...) or not(...))
어떻게 올바르게 필터링 할 수 있습니까? 모든 대답은 환영합니다, 어쩌면 다른 방법이 있습니다.
당신의 도움을 위해 !!!
네, 맞습니다. 나는 Q 객체로 그렇게 할 수 있기를 바랬다. 이 경우 다른 TaggedObjects에 대해 동일한 필터를 사용할 수 있습니다. API를 다시 작성하고 그런 식으로 구현했습니다. 고마워 –