Попытка передать строку для запроса через URL Django Rest Framework - PullRequest
0 голосов
/ 09 января 2019

У меня есть проект Django, и я использую Django Rest Frameowkr. Я настраиваю модель, сериализатор, представление и URL для пользовательской модели. У меня есть файл URL. Я хочу передать что-то вроде имени пользователя, когда вызывается URL API. В настоящее время у меня настроен первичный ключ, поэтому при вводе первичного ключа он работает. Я хочу переключить его на имя пользователя. Я также хочу, чтобы запрос сериализатора возвращал объект пользователя с именем пользователя, которое я передал. Я использую стандартный Djangos User объект из django.contrib.auth.models Вот код, который у меня есть

Urls.py

from django.urls import path
from django.contrib.auth.models import User

from .views import UserListView, UserDetailsView
from .views import ProfileListView, ProfileDetailsView
from .views import RoleListView, RoleDetailsView

urlpatterns = [
    path('user/', UserListView.as_view()),
    path('user/<pk>', UserDetailsView.as_view()),
]

файл serializer.py

from rest_framework import serializers

from django.contrib.auth.models import User
from users.models import Profile, Role

class UserSerializer(serializers.ModelSerializer):
    class Meta:
        model = User
        fields = ('username', 'first_name', 'last_name', 'email', 'is_staff', 'last_login')

Views.py file

from rest_framework.generics import ListAPIView, RetrieveAPIView

from django.contrib.auth.models import User

from users.models import Profile, Role
from .serializers import UserSerializer, ProfileSerializer, RoleSerializer

class UserListView(ListAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

class UserDetailsView(RetrieveAPIView):
    queryset = User.objects.all()
    serializer_class = UserSerializer

1 Ответ

0 голосов
/ 09 января 2019

Укажите lookup_field в UserDetailsView и измените шаблон URL в urls.py, как показано ниже

# urls.py
urlpatterns = [
    path('user/', UserListView.as_view()),
    path('user/<b><username></b>', UserDetailsView.as_view()),
]


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