Как добавить пользователя в view_create viewset (django rest framework)? - PullRequest
0 голосов
/ 01 февраля 2019

Я хочу сделать таблицу комментариев.В таблице будет поле, содержащее user_id, который создал комментарий.Пользователь, связанный с таблицей комментариев, относится к модели пользователя Django по умолчанию.Это модель комментариев:

class Comment(models.Model):
    user = models.ForeignKey(User, on_delete=models.CASCADE)
    content = models.TextField()
    pub_date = models.DateTimeField(auto_now_add=True)

Это сериализатор комментариев:

class CommentSerializer(serializers.ModelSerializer):

    class Meta:
        model = Comment
        fields = '__all__'

Это набор для создания нового комментария:

class CommentViewSet(mixins.CreateModelMixin, viewsets.GenericViewSet):
    queryset = Comment.objects.all()
    serializer_class = CommentSerializer
    permission_classes = (IsAuthenticated,)

    def perform_create(self, serializer):
        serializer.save(user=self.request.user)

Я также интегрирую пользователя с django rest jwt для авторизации.Это заголовок и данные, которые я отправил в API.

Заголовок:

Авторизация: Носитель {токен jwt}

Тип содержимого: application / json

body:

{"content": "Это комментарий"}


Но я получаю этот ответ:

{"user": ["Это поле обязательно к заполнению."]}


Как исправить сериализатор, чтобы он извлекал пользователя из токена (request.user)?

1 Ответ

0 голосов
/ 01 февраля 2019

Это потому, что поле user не является read only field.Таким образом, вы должны сделать это так.

Этот документ DRF - Указание полей только для чтения хорошо описывает это

В вашем случае, указав read_only_fields в мета классе вашего сериализатора решит проблему:)

class CommentSerializer(serializers.ModelSerializer):
    class Meta:
        model = Comment
        fields = '__all__'
        <b>read_only_fields = ('user',) # change is here <<<</b>
...