我有Django的问题。我按照教程中的说法完成了所有操作,但是当我在序列化程序上检查is_valid时,总是会出现错误。
这是我的代码:
models.py
from django.db import models
class User(models.Model):
userId = models.CharField(max_length=100)
email = models.EmailField()
serializers.py
from .models import User
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'userId', 'email')
然后我运行python manage.py shell
。然后我使用如下命令:
from belmondoapp.models import User
from belmondoapp.serializers import UserSerializer
u = User(userId="user", email="asd@gmail.com")
s = UserSerializer(data=u)
s.is_valid()
它总是返回False ...为什么?我错了什么?
答案 0 :(得分:6)
s = UserSerializer(data=u)
应该是:
s = UserSerializer(data={"userId"="user", "email"="asd@gmail.com"})
序列化过程(从模型到字典)不需要调用is_valid
:
s = UserSerializer(instance=u)
s.data
反序列化过程(从dict到Model)不接受模型:
s = UserSerializer(data={"userId"="user", "email"="asd@gmail.com"})
s.is_valid()
s.validated_data
答案 1 :(得分:1)
遇到相同的问题后,我想在评论部分中强调@Andrea Corbellini提供的解决方案:
print(s.errors)
将返回包含fields: reason for fail
的字典。就我而言,这看起来像:
{
'start_date': [ErrorDetail(string='Expected a date but got a datetime.', code='datetime')],
'end_date': [ErrorDetail(string='Expected a date but got a datetime.', code='datetime')],
'client': [ErrorDetail(string='Incorrect type. Expected pk value, received Client.', code='incorrect_type')]
}
我发现这绝对无价。
答案 2 :(得分:0)
如果要查看异常详细信息,请使用raise_exception
参数作为True
,即
obj.is_valid(raise_exception=True)