Проблема в размещении 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)