2014-11-25 2 views
1

Я использую пользователя по умолчанию Django и конечную точку REST API для списка пользователей, отфильтрованных по параметрам запроса. Это выглядит следующим образом:django-filter - параметр запроса карты к имени поля

# 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 «s в параметре запроса. Поэтому, если я хочу фильтровать пользователей на основе имени пользователя, я бы использовал /users/?username=johndoe. Но что, если я хочу сопоставить параметр запроса, который не является полем в модели пользователя? Скажем, у меня есть параметр запроса, который называется nickname, и я хочу использовать его для фильтрации по полю first_name?

Использование URLConf и названная группа могут быть решением, но если я сделаю это для 15 полей, это будет очень долго.

Каков наилучший способ?

ответ

1

Вы можете добавить nickname в свой FilterSet, указав фактическое поле на модели.

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