django-filter - 将查询参数映射到字段名称

时间:2014-11-25 22:00:09

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

我使用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。但是,如果我想映射一个不是User模型中的字段的查询参数呢?我们说,我有一个名为nickname的查询参数,我想用它来过滤first_name字段?

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

更好的方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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