Django rest框架序列化器有效总是假的

时间:2016-04-07 17:04:44

标签: 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()

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 ...为什么?我错了什么?

3 个答案:

答案 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)