Как настроить аутентифицированного пользователя для сериализатора? - PullRequest
1 голос
/ 07 февраля 2020

Я создал простой CreateAPIView, используя django rest framework.

class CreatePostAPIView(generics.CreateAPIView):
    serializer_class = serializers.PostSerializer
    permission_classes = [IsAuthenticated]

class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'

class Post(models.Model):
    user    = models.ForeignKey(User, on_delete = models.CASCADE, null = True, blank = False)
    spot    = models.ForeignKey(Spot, on_delete = models.CASCADE, null = True, blank = False)
    comment = models.TextField(null = True, blank =  False)

Model Spot имеет три поля

  • user
  • spot
  • comment

От клиента, спот и комментарий отправляются с использованием параметра http POST-запроса начиная с JSON.

Однако пользователь не приходит с параметром http POST-запроса, но мне нужно чтобы получить пользователя от аутентифицированного пользователя django (например, request.user). Я знаю, что могу получить пользователя из request.user, но как мне настроить пользователя на сериализатор?

1 Ответ

1 голос
/ 07 февраля 2020

Переопределить perform_create(...) - (DRF do c) метод CreatePostAPIView класса и установить user в read_only_fields - (DRF do c) в PostSerializer класс

# views.py
class CreatePostAPIView(generics.CreateAPIView):
    serializer_class = serializers.PostSerializer
    permission_classes = [IsAuthenticated]

    <b>def perform_create(self, serializer):
        serializer.save(user=self.request.user)</b>


# serializers.py
class PostSerializer(serializers.ModelSerializer):
    class Meta:
        model = Post
        fields = '__all__'
        <b>read_only_fields = ('user',)</b>
...