2016-04-07 3 views
0

У меня проблема с Django. Я сделал все, как было написано в учебнике, но когда я проверяю is_valid на serializer, всегда есть false.Django rest framework serializer действителен всегда false

Вот мой код:

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="[email protected]") 
s = UserSerializer(data=u) 
s.is_valid() 

И он всегда возвращает False ... Почему? Что я не так?

+0

Проверьте 's.errors' после вызова' s.is_valid() ' –

+0

Кстати, я думаю, что проблема в том, что ваш' u' не имеет идентификатора (который требуется вашим сериализатором). Сначала вы должны сохранить его. –

+0

У меня есть '' {'non_field_errors': ['Неверные данные. Ожидаемый словарь, но получил User. ']} '', Вызвав s.errors –

ответ

4
s = UserSerializer(data=u) 

должно быть:

s = UserSerializer(data={"userId"="user", "email"="[email protected]"}) 

Сериализация процесс (от модели к словарю) не требует вызова is_valid:

s = UserSerializer(instance=u) 
s.data 

Процесс десериализации (от Dict к модели) не принимает Модель:

s = UserSerializer(data={"userId"="user", "email"="[email protected]"}) 
s.is_valid() 
s.validated_data 
Смежные вопросы