【问题标题】:Django-tables2 and Django-filters: Filtering list of dictsDjango-tables2 和 Django-filters:过滤字典列表
【发布时间】:2018-10-05 18:41:09
【问题描述】:

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

其他词

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

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

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

【问题讨论】:

  • 来自django-filter github description:“基于用户选择过滤 Django QuerySets 的通用系统”如果您想使用这样的自定义解决方案,请准备好编写一些自定义代码......跨度>

标签: django django-filter django-tables2


【解决方案1】:

您可以使用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”的Model2s,并通过field1bar 连接到Model1。你可以这样做:

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

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

这将返回任何Model1field1 'bar' 并连接到任何 Model2field3 'foo'。

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

【讨论】:

  • 谢谢,正是我想要的
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-03-25
  • 2021-02-16
  • 1970-01-01
  • 2021-04-09
相关资源
最近更新 更多