簡體   English   中英

如何在GenericRelation中按外鍵過濾?

[英]How to filter by foreign key in GenericRelation?

這是我的模型:

class Model1(models.Model):
    ...
    distributor_links = GenericRelation(Relation, related_query_name="distributor_persons")

class Model2(models.Model):
    ...
    distributor_links = GenericRelation(Relation, related_query_name="distributor_groups")

class Model3(models.Model):
    pass

class Relation(models.Model):
    link = models.ForeignKey(Model3)

    content_type = models.ForeignKey(ContentType)
    object_id = models.PositiveIntegerField()
    content_object = GenericForeignKey('content_type', 'object_id')

現在,我想獲取與Model3對象關聯的所有Model1Model2對象。 我的查詢如下所示:

Model1.objects.filter(distributor_links=self.object)

其中self.objectModel3實例。 該查詢引發錯誤: Cannot query "query": Must be "Relation" instance我理解為什么會引發此錯誤。 在這里distributor_links=self.object無法將Relation對象與Model3對象進行比較,但是我仍然不知道如何編寫所需的查詢。 有任何想法嗎?

是否可以解析對象的ContentType並使用它和對象ID進行過濾。

content_type = ContentType.objects.get_for_model(self.object)

Model1.objects.filter(distributor_links__content_type=content_type, distributor_links__object_id=self.object.id)

如果self.objectModel3實例,則可以:

Model1.objects.filter(distributor_links__link=self.object)

此問題類似於:Django- 如何使用帶有外鍵字段的過濾器?

也就是說,字段名稱,后跟雙下划線(__),后跟新模型中的字段名稱,依此類推。

有關更多信息: https : //docs.djangoproject.com/en/dev/ref/models/querysets/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM