Django-tables2和Django-filters:过滤字典列表

时间:2018-10-05 18:41:10

标签: django django-filter django-tables2

我有一张桌子,它是由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)
...

有什么建议吗?因为我认为制作另一个模型不是一个好的解决方案。

1 个答案:

答案 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