Django REST API serializer.is_valid() 总是 returns false
Django REST API serializer.is_valid() always returns false
我正在尝试通过 REST API 从前端向后端发出 POST 请求。我将作为数据传递的字典包含数据库
中 table 的所有字段
来自前端的数据如下所示:
var state = {
event: {
name: "test",
id_organizer: 1,
start_date: "2019-11-11T11:11:11",
end_date: "2019-12-11T11:12:11",
location: "test",
description: "test",
id_type: 1,
status: "pending",
}
}
和POST这样的请求:
axios
.post("http://127.0.0.1:8000/api/addevent", state.event)
.then(response =>{
console.log(response.data);
})
.catch(err => console.log(err));
活动模型如下:
class Event(models.Model):
name = models.TextField()
id_organizer = models.ForeignKey(User, on_delete=CASCADE, db_column='id_organizer')
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.TextField()
description = models.TextField()
id_type = models.ForeignKey(EventType, on_delete=CASCADE, db_column='id_type')
status = models.CharField(max_length = 50)
class Meta:
db_table="events"
Here is the database table
这是@api_view:
@api_view(['POST'])
def addevent(request):
if request.method == "POST":
data = JSONParser().parse(request)
serializer = EventSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response({'saved':True},status=status.HTTP_201_CREATED)
else:
return Response({'saved':False}, status=status.HTTP_400_BAD_REQUEST)
这是序列化程序:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
请求发生但函数 serializer.is_valid() 总是 returns false 并且响应总是 {'saved':False}
我已经验证了发送的数据是否正确,当我打印它时,我得到了输出:
{
"name": "test",
"id_organizer": 1,
"start_date": "2019-11-11T11:11:11",
"end_date": "2019-12-11T11:12:11",
"location": "test",
"description": "test",
"id_type": 1,
"status": "pending",
}
这个数据是正确的,我得出的结论是问题出在“is_valid()”函数上。
我试图对 api 视图中的数据进行硬编码,但它 运行 进入了同一个问题。
我已经检查并尝试了关于该主题的大部分帖子,但我找不到我的错误。
您输入的日期时间可能未通过模型日期时间字段进行验证。
您可能需要使用 strptime 更改日期时间格式。
我正在尝试通过 REST API 从前端向后端发出 POST 请求。我将作为数据传递的字典包含数据库
中 table 的所有字段来自前端的数据如下所示:
var state = {
event: {
name: "test",
id_organizer: 1,
start_date: "2019-11-11T11:11:11",
end_date: "2019-12-11T11:12:11",
location: "test",
description: "test",
id_type: 1,
status: "pending",
}
}
和POST这样的请求:
axios
.post("http://127.0.0.1:8000/api/addevent", state.event)
.then(response =>{
console.log(response.data);
})
.catch(err => console.log(err));
活动模型如下:
class Event(models.Model):
name = models.TextField()
id_organizer = models.ForeignKey(User, on_delete=CASCADE, db_column='id_organizer')
start_date = models.DateTimeField()
end_date = models.DateTimeField()
location = models.TextField()
description = models.TextField()
id_type = models.ForeignKey(EventType, on_delete=CASCADE, db_column='id_type')
status = models.CharField(max_length = 50)
class Meta:
db_table="events"
Here is the database table
这是@api_view:
@api_view(['POST'])
def addevent(request):
if request.method == "POST":
data = JSONParser().parse(request)
serializer = EventSerializer(data=data)
if serializer.is_valid():
serializer.save()
return Response({'saved':True},status=status.HTTP_201_CREATED)
else:
return Response({'saved':False}, status=status.HTTP_400_BAD_REQUEST)
这是序列化程序:
class EventSerializer(serializers.ModelSerializer):
class Meta:
model = Event
fields = '__all__'
请求发生但函数 serializer.is_valid() 总是 returns false 并且响应总是 {'saved':False} 我已经验证了发送的数据是否正确,当我打印它时,我得到了输出:
{
"name": "test",
"id_organizer": 1,
"start_date": "2019-11-11T11:11:11",
"end_date": "2019-12-11T11:12:11",
"location": "test",
"description": "test",
"id_type": 1,
"status": "pending",
}
这个数据是正确的,我得出的结论是问题出在“is_valid()”函数上。 我试图对 api 视图中的数据进行硬编码,但它 运行 进入了同一个问题。 我已经检查并尝试了关于该主题的大部分帖子,但我找不到我的错误。
您输入的日期时间可能未通过模型日期时间字段进行验证。 您可能需要使用 strptime 更改日期时间格式。