首页 > 解决方案 > django rest 框架的 django-filter:in 运算符无法正常工作(它认为这是一个选择字段?)

问题描述

假设我们有 Pizza 和 Topping 模型,并且 Topping 有 Pizza 的外键字段。

我们有一个返回浇头的 django rest 框架视图集。

我们希望能够针对具有给定 ID 的披萨中使用的配料提出问题,如下所示:

GET /toppings?pizza_id__in=1,2,456

我们有

class ToppingsFilter(django_filters.rest_framework.FilterSet):

    class Meta:
        strict = False
        fields = {
            'id': ['exact'],
            'pizza_id': ['exact', 'in']
        }

问题是使用不存在的 Pizza_id 调用 GET 时,出现以下错误:

{
    "pizza_id__in": [
        "Select a valid choice. That choice is not one of the available choices."
    ]
}

如果传递有效的比萨 ID(现有的),它会按预期工作!

这是默认行为吗?这似乎没有任何意义。为什么它甚至对 GET 操作进行此类验证。GET /toppings?pizza_id__in=1,2,435456 的意图显然是选择以下对象:

SELECT from toppings where pizza_id IN (1,2,435456)

标签: django-rest-frameworkdjango-filters

解决方案


推荐阅读