Django REST Framework ModelSerializer read_only_fields не работает - PullRequest
0 голосов
/ 25 апреля 2018

У меня есть следующее ListCreateAPIView

  class TodoAPI(generics.ListCreateAPIView):
    permission_classes = (IsAuthenticated, )
    serializer_class = TodoSerializer

    def get_queryset(self):
        user = self.request.user
        return Todo.objects.filter(user=user)

А по моему serializers.py у меня

class TodoSerializer(serializers.ModelSerializer):
    class Meta:
        model = Todo
        fields = ('id', 'title', 'description',
                  'completed', 'created_at')
        read_only_fields = ('id', )

Но проблема в том, что когда я помещаю данные в форму, я получаю следующую ошибку:

IntegrityError at /todo/
NOT NULL constraint failed: todo_todo.user_id

models.py

class Todo(models.Model):
    user = models.ForeignKey('auth.User', on_delete=models.CASCADE)
    title = models.TextField(max_length=50)
    description = models.TextField(max_length=200, blank=True, null=True)
    completed = models.BooleanField(default=False)
    created_at = models.DateTimeField(auto_now_add=True)

1 Ответ

0 голосов
/ 25 апреля 2018

Проблема не в поле id, а в поле user.Это поле не имеет значения NULL в БД и является обязательным.Вы можете просто передать текущего пользователя как defalt, для этого используйте CurrentUserDefault:

class TodoSerializer(serializers.ModelSerializer):
    user = serializers.HiddenField(default=serializers.CurrentUserDefault())
    class Meta:
        model = Todo
        fields = ('id', 'title', 'description',
                  'completed', 'created_at', 'user')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...