Создайте новый сериализатор для Profile
модели
class ProfileSerializer(serializers.ModelSerializer):
class Meta:
model = Profile
fields = "__all__"
, затем создайте новый класс представления для Profile
.
from rest_framework.views import APIView
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
class ProfileAPI(APIView):
def get(self, request, *args, **kwargs):
user = get_object_or_404(User, pk=kwargs['user_id'])
profile_serializer = ProfileSerializer(user.profile)
return Response(profile_serializer.data)
Затем подключите представление в urls.py
urlpatterns = [
# your other url configs
path('api/users/<user_id>/profile/', ProfileAPI.as_view())
]
Update-1
Реализация с использованием ViewSet
класс
<b>from rest_framework import viewsets</b>
from rest_framework.response import Response
from django.shortcuts import get_object_or_404
class ProfileAPI(<b>viewsets.ViewSet</b>):
def get(self, request, *args, **kwargs):
user = get_object_or_404(User, pk=kwargs['user_id'])
profile_serializer = ProfileSerializer(user.profile)
return Response(profile_serializer.data)
Update-2
from rest_framework import viewsets
class ProfileAPI(viewsets.ModelViewSet):
serializer_class = ProfileSerializer
def get_queryset(self):
return Profile.objects.filter(user=self.kwargs['user_id'])
и в вашем urls.py
зарегистрируйте набор настроек как
router.register('api/users/(?P<user_id>\d+)/profile', ProfileAPI, base_name='profile_api')