【问题标题】:django-filter - map query parameter to field namedjango-filter - 将查询参数映射到字段名称
【发布时间】:2015-01-24 02:17:47
【问题描述】:

我正在使用 Django 的默认用户和 REST API 端点来列出按查询参数过滤的用户。它看起来像这样:

# serializers.py
class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User

# views.py
class UserFilter(django_filters.FilterSet):
    class Meta:
        model = User


class UserList(generics.ListAPIView):
    model = User
    serializer_class = UserSerializer
    filter_class = UserFilter

只要我在查询参数中提供User 的字段名称,它就可以很好地工作。所以,如果我想根据用户名过滤用户,我会使用/users/?username=johndoe。但是,如果我想映射不是用户模型中的字段的查询参数怎么办?假设我有一个名为 nickname 的查询参数,我想用它来过滤 first_name 字段?

使用URLConf 和命名组可能是一个解决方案,但如果我为 15 个字段这样做,那么它会很长。

有什么更好的方法?

【问题讨论】:

    标签: python django django-rest-framework django-filter


    【解决方案1】:

    您可以将nickname 添加到您的FilterSet 中,指向模型上的实际字段。

    # views.py
    class UserFilter(django_filters.FilterSet):
        nickname = django_filters.CharFilter(name='first_name')
        class Meta:
            model = User
    

    【讨论】:

    • 参数名称现在是field_name:使用django_filters.CharFilter(field_name='first_name')
    猜你喜欢
    • 2022-01-12
    • 2018-07-29
    • 1970-01-01
    • 2018-11-04
    • 2012-04-02
    • 2021-08-12
    • 1970-01-01
    • 2023-03-14
    • 1970-01-01
    相关资源
    最近更新 更多