[英]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對象關聯的所有Model1
或Model2
對象。 我的查詢如下所示:
Model1.objects.filter(distributor_links=self.object)
其中self.object
是Model3
實例。 該查詢引發錯誤: 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.object
是Model3
實例,則可以:
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.