Проблема в размещении Django API, он показывает "name": ["Это поле обязательно для заполнения"].

это мой serializers.py

from rest_framework import serializers from api.models import Movie

class MovieSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name=serializers.CharField()
    description= serializers.CharField()
    viewed = serializers.BooleanField()

    def create(self,validated_data):
        return Movie.objects.create(**validated_data)

вот мой models.py

class Movie(models.Model):
    name = models.CharField(max_length=20)
    description = models.CharField(max_length=100)
    viewed=models.BooleanField(default=True)
    
    def __str__(self):
      return self.name

это views.py

@api_view(['GET','POST'])
def home(request):

    if request.method == 'GET':
        movies=Movie.objects.all()
        serializer=MovieSerializer(movies,many=True)
        return Response(serializer.data)

    if request.method == 'POST':
        serializer=MovieSerializer(data=request.POST)
        
        if serializer.is_valid():
            serializer.save()
            return Response(serializer.data)
        else:
            return Response(serializer.errors)

вот как выглядит мой вывод

{
    "name": [
        "This field is required."
    ],
    "description": [
        "This field is required."
    ]
}

можно попробовать изменить сериализатор таким образом

class MovieSerializer(serializers.Serializer):
    id = serializers.IntegerField(read_only=True)
    name=serializers.CharField()
    description= serializers.CharField()
    viewed = serializers.BooleanField()

    def create(self, name, description, viewed):
        return Movie.objects.create(name=name, description=description, viewed=viewed)

Как я вижу из вашего views.py, мы можем видеть request.POST, там из запроса мы получаем данные не POST, POST - это метод API.

serializer=MovieSerializer(data=request.POST)

Измените эту строку на следующую:

serializer=MovieSerializer(data=request.data)

и ниже вы возвращаете данные сериализатора, а не POST.

    return Response(serializer.data)
Вернуться на верх