Pat*_*osa 2 python django django-rest-framework python-3.5
我有Django的问题.我按照教程中的说法完成了所有操作,但是当我在序列化程序上检查is_valid时总是会出现错误.
这是我的代码:
models.py
from django.db import models
class User(models.Model):
userId = models.CharField(max_length=100)
email = models.EmailField()
Run Code Online (Sandbox Code Playgroud)
serializers.py
from .models import User
from rest_framework import serializers
class UserSerializer(serializers.ModelSerializer):
class Meta:
model = User
fields = ('id', 'userId', 'email')
Run Code Online (Sandbox Code Playgroud)
然后我跑了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()
Run Code Online (Sandbox Code Playgroud)
它总是返回False ...为什么?我错了什么?
s = UserSerializer(data=u)
Run Code Online (Sandbox Code Playgroud)
应该:
s = UserSerializer(data={"userId"="user", "email"="asd@gmail.com"})
Run Code Online (Sandbox Code Playgroud)
序列化过程(从模型到字典)不需要调用is_valid:
s = UserSerializer(instance=u)
s.data
Run Code Online (Sandbox Code Playgroud)
反序列化过程(从dict到Model)不接受Model:
s = UserSerializer(data={"userId"="user", "email"="asd@gmail.com"})
s.is_valid()
s.validated_data
Run Code Online (Sandbox Code Playgroud)
遇到相同的问题后,我想在评论部分强调@Andrea Corbellini提供的解决方案:
print(s.errors)
Run Code Online (Sandbox Code Playgroud)
将返回包含的字典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')]
}
Run Code Online (Sandbox Code Playgroud)
我发现这绝对无价。