django-filter使用外键跨多个模型进行过滤

时间:2018-01-11 17:40:55

标签: python django django-filter

问题

我正在使用django-filter包来过滤我的搜索结果。假设我的模型如下所示:

class Material(models.Model):
    name = models.CharField(...)

class Test1(models.Model):
    id
    materialTested = models.ForeignKey(...)
    TestResult = models.DecimalField(...)
class Test2(models.Model):
    id
    materialTested = models.ForeignKey(...)
    TestResult = models.DecimalField(...)

我正在尝试使用来自Test1和Test2的结果来使用包过滤。测试是他们自己的模型的原因是因为相同的测试(或没有)的倍数可以为相同的材料运行

当前进度 我目前已将其设置为通过定义以下过滤器使用单个测试进行过滤:

class Filter1(django_filters.FilterSet):
   class Meta:
      model = Test1
      fields = {'TestResult':['gte','lte']}

目标

目标是能够使用两个测试的结果进行过滤(将材料返回到列表中)。例如,Meta的字段部分如下所示:

fields={'TestResult':['gte','lte'], 'TestResult__fromTest2':['gte','lte']}

我知道这不起作用,因为Test2在任何地方都没有提及,我很确定过滤器的第二部分没有正确写入。任何帮助表示赞赏!

1 个答案:

答案 0 :(得分:0)

如果有人感兴趣的话,我在当天晚些时候找到了答案。

正确的语法是使用Material模型创建过滤器,例如:

class MaterialFilter(django_filters.FilterSet):
    ....

并在过滤器Meta中使用:

fields={'test1__TestResult':['methods','here'], 'test2__TestResult':['methods','here']}