如何使用 DjangoFilterBackend 过滤 ForeignKey 的多个值

Posted

技术标签:

【中文标题】如何使用 DjangoFilterBackend 过滤 ForeignKey 的多个值【英文标题】:How to filter against multiple values for ForeignKey using DjangoFilterBackend 【发布时间】:2017-04-02 00:43:51 【问题描述】:

我有以下字段的模型:

loading_port discharge_port 载体 供应商

所有这些字段都是包含 name 字段的模型的 ForeignKey。

我还有视图集,它使用 DjangoFilter 后端进行过滤。此时我想为每个字段过滤多个值,例如:

loading_port__name=PORT_1&loading_port__name=PORT_2&supplier__name=SUPP_NAME_1&supplier__name=SUPP_NAME_2 等等。但是,如果我实际传递此 url,它会返回针对最后一个参数值进行过滤的行(在此示例中,用于 loading_port - PORT_2,用于供应商 - SUPP_NAME_2)。

如何修复过滤以使其满足我的要求?

【问题讨论】:

嗨!你能提供模型的代码并查看你在哪里使用这些过滤器吗? 这能回答你的问题吗? How do you use the django-filter package with a list of parameters? 【参考方案1】:

但是,如果我实际上传递了这个 url,它会返回针对最后一个参数值进行过滤的行

这是因为ForeignKey 字段默认为ModelChoiceFilter,它只从GET QueryDict 中获取一个值。

如果您将字段声明为ModelMultipleChoiceFilter,它们将获取您需要的值列表。

【讨论】:

以上是关于如何使用 DjangoFilterBackend 过滤 ForeignKey 的多个值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 ListAPIView 中使用 django-filter 对过滤结果进行排序

如何在ListAPIView中使用django-filter对过滤结果进行排序

带有 DRF 的 Django-filter - 如何在使用相同查找应用多个值时执行“和”?

drf 使用filter_backends 搜索过滤

DRF框架GenericAPIView之排序查询

drf-过滤组件