Ошибки Django Rest Framework view set url filter - PullRequest
0 голосов
/ 14 мая 2019

Я создаю бэкэнд, используя структуру отдыха django.Я создаю пользовательские наборы настроек django и маршрутизаторы urlpattern.Я хочу добавить фильтр для имени пользователя в URL, если имя пользователя передано, а если нет, то показать всех пользователей.У меня будет мой код ниже.

Это просмотры:

from django.contrib.auth.models import User
from ..serializers import UserSerializer
from rest_framework import viewsets

class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer

    def get_queryset(self):
        queryset = User.objects.all()
        username = self.request.query_params.get('username', None)
        if username is not None:
            queryset = queryset.filter(username = username)
        return queryset

Вот файл URL:

from users.api.views.userViews import UserViewSet
from rest_framework.routers import DefaultRouter

router = DefaultRouter()
router.register(r'(?P<username>.+)/$', UserViewSet, base_name='user')
urlpatterns = router.urls

Вот URL в настройках:

path('api/users/', include('users.api.urls.userUrls')),

Я хочу следующее:

api/users/ для возврата всех пользователей и api/users/testAdmin для возврата объекта администратора *

Ответы [ 2 ]

1 голос
/ 14 мая 2019

Вы можете написать так в своем представлении:

def get_queryset(self, *args, **kwargs):
    requested_user = self.kwargs.get('username')
    if (requested_user):
        qs = yourqueryset.objects.filter(User__username=requested_user)
    else:
        qs = yourqueryset.objects.all().order_by('-timestamp')
    return qs
1 голос
/ 14 мая 2019

Я думаю, что вы ищете lookup_field магию, а не filter
Попробуйте следующий фрагмент кода,

# views.py
class UserViewSet(viewsets.ModelViewSet):
    serializer_class = UserSerializer
    <b>lookup_field = 'username'
    queryset = User.objects.all()</b>


# urls.py

router = DefaultRouter()
<b>router.register(r'', UserViewSet, base_name='user')</b>
urlpatterns = router.urls
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...