Python 一般关系中如何按外键过滤?
以下是我的模型:Python 一般关系中如何按外键过滤?,python,django,django-models,Python,Django,Django Models,以下是我的模型: class Model1(models.Model): ... distributor_links = GenericRelation(Relation, related_query_name="distributor_persons") class Model2(models.Model): ... distributor_links = GenericRelation(Relation, related_query_name="distri
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
实例。
查询引发错误:无法查询“查询”:必须是“关系”实例
我理解它为什么会抛出这个错误。这里的
distributor\u links=self.object
无法将关系
对象与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)
此静止类似于:
也就是说,新模型中字段的名称,后跟双下划线(_u),后跟字段的名称,依此类推,适用于您想要加入的任意多个模型
有关详细信息:您已按self.object进行筛选。对象是什么?@kari antti,正如我所说的,对象是Model3I的一个实例,我想这比使用查找表达式要困难得多。这样行。谢谢