我有一张桌子,它是由3种不同的模型制成的。我想过滤它们。但是问题是-我发现的所有示例都是关于queryset的,并且只有一个模型。
dict = [
{'name': Model1.objects.get(id=1), 'adress': Model2.objects.get(id=Model1.objects.get(id=1))},
{'name': Model1.objects.get(id=2),},
...
]
filter=FilterSet(queryset=???)
重点是-我从Model1获得的另一个模型的数据。但是我无法在此模型上构建表,因为它没有指向其他2个模型的外键。
其他词
class Model1(models.Model):
field1 = models.Charfield()
field2 = models.Charfield()
class Model2(models.Model):
field3 = models.Charfield()
field4 = models.ForeignKey(Model1)
...
有什么建议吗?因为我认为制作另一个模型不是一个好的解决方案。
答案 0 :(得分:0)
您可以使用ForeignKey
创建将两个模型组合在一起的查询集。假设您的模型如下所示(为清楚起见,我将您的FK字段重命名):
class Model1(models.Model):
field1 = models.Charfield()
field2 = models.Charfield()
class Model2(models.Model):
field3 = models.Charfield()
model1 = models.ForeignKey(Model1, related_name='model2s')
假设您要搜索所有Model2
,其中field3
为'foo',并且与Model1
和{{1} }。您将这样做:
field1
您也可以从bar
开始,使用Django自动创建的queryset = Model2.objects.filter(field3='foo', model1__field1='bar')
字段。 (如果您没有在Model1
中添加名称,则Django会使用默认的方式来命名这些名称,但是最好始终保持明确。)
这将返回任何related_name
,其中ForeignKey
为'bar',并且连接到 any Model1
,且field1
为' foo'。
Model2