DRF Поле только для чтения все еще проверено - PullRequest
0 голосов
/ 01 февраля 2019

У меня есть поле, в котором я хочу всегда быть пользователем.Мой сериализатор выглядит так:

class MySerializer(serializers.ModelSerializer):

    class Meta:
        model = MyModel
        fields = '__all__'
        read_only_fields = ('user',)

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

class MyModel(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    ...

Но он выдает ошибку NOT NULL constraint failed: app_my_model.user_id, но поле только для чтения ... Я не понимаю.

1 Ответ

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

Прежде всего, нет метода с именем perform_save() для сериализатора, он предназначен для класса viewset.Это может быть проблемой
Используйте метод save(), как показано ниже

class MySerializer(serializers.ModelSerializer):
    class Meta:
        model = MyModel
        fields = '__all__'
        read_only_fields = ('user',)

    <b>def save(self, **kwargs):
        kwargs['user'] = self.context['request'].user
        return super().save(**kwargs)</b>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...