发布 Django API 时出现问题,它显示"name":[ "This field is required." ]



这是我的序列化程序.py

从rest_framework导入序列化程序从api.models导入电影

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)

这是我的型号.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中看到的,我们可以看到请求。POST,从请求中我们得到的数据不是POST,POST是API方法。

serializer=MovieSerializer(data=request.POST)

所以把这行改成:

serializer=MovieSerializer(data=request.data)

下面您返回的是序列化程序数据,而不是POST。

return Response(serializer.data)

相关内容

最新更新