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' 且连接到 Model1
的 field1
的所有 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')
我有一个 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' 且连接到 Model1
的 field1
的所有 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')