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

Django-tables2 and Django-filters: Filtering list of dicts

我有一个 table,是我用 3 种不同的模型制作的。我想过滤它们。但问题是 - 我发现的所有示例 - 都是关于查询集并且只有一个模型。

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 获得的另一个模型的数据。但是我不能在这个模型上构建 table,因为它没有其他 2 个模型的外键。

换句话说

class Model1(models.Model):
    field1 = models.Charfield()
    field2 = models.Charfield()

class Model2(models.Model):
    field3 = models.Charfield()
    field4 = models.ForeignKey(Model1)
...

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

您可以使用 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')

假设您想搜索 field3 为 'foo' 且连接到 Model1field1 的所有 Model2 bar。你会这样做:

queryset = Model2.objects.filter(field3='foo', model1__field1='bar')

您也可以从 Model1 开始,使用 Django 自动创建的 related_name 字段。 (如果您不在 ForeignKey 中包含名称,Django 将使用默认方式命名这些名称,但最好始终明确。)

这将 return 具有 'bar' 的 field1 并且连接到 any [=14] 的任何 Model1 =] field3 'foo'.

queryset = Model1.objects.filter(field1='bar', model2s__field3='foo')