Как получить экземпляр пользователя с помощью django rest framework
Возможно, вопрос неправильно сформулирован. Я создал профиль пользователя с помощью Django с помощью следующих блоков кода:
models.py
class = Profile (models.Models):
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
first name = models.CharField(max_length=50)
•••
serializer.py
class profile_serializer(serializers.ModerlSerializer)
class Meta:
model = Profile
fields = '__all__'
views.py
class profile_view(generics.ListCreateAPIView)
queryset = Profile.objects.all().filter(user=instance)
urls.py
urlspatterns = [path('profile', profile_view.as_view(), name='user_profile)
Я определенно не знаю, как реализовать метод фильтрации, чтобы гарантировать, что будет получен только зарегистрированный пользователь. Или есть лучший подход для получения конкретного пользователя? Если я использую Project.objects.all()
без фильтра, я получаю всех зарегистрированных пользователей, как и ожидалось. Но я не знаю, как получить конкретного пользователя.
Хм, я бы сделал что-то вроде этого:
from rest_framework.response import Response
from rest_framework import status, generics, permissions
class UserView(generics.GenericAPIView):
permission_classes = (permissions.IsAuthenticated,)
serializer_class = profile_serializer
def get(self, request):
user = request.user
return Response(profile_serializer(user).data,status=status.HTTP_200_OK)
В основном, когда пользователь аутентифицирован, его пользователь присутствует в запросе.
Вот UserSerializer, комментарии было трудно форматировать. (Иронично для технического форума?)
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = '__all__'
def get(self, instance):
return instance
def patch(self, instance, validated_data):
instance.model_method()
return super().update(instance, validated_data)
def create(self, validated_data):
user = self.context['request'].user
return super().update(user, validated_data)
А вот profile_serializer:
class profile_serializer(serializers.ModerlSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = Profile
fields = ('user', 'first_name', )