2017-01-21 1 views
0

을 장고 나는 다음 is_valid()를 사용하지만 그것은 나를 거짓이 아닌 진실주는 다음 개체에 시리얼을 사용하여 파이썬 쉘에서 새 사용자 개체를 만드는 노력이손님 사용자 시리얼 라이저) (is_valid - 나는 사용자 양식을 작성하는 양식 모델을 사용하고 있지 않다 등등 그래서 나는 <code>form.is_valid()</code></p> <p>내가 온라인을 통해 가서에 배운 사용하고 있지 않다 어떤 이유로

from django.contrib.auth.models import User 
from rest_framework import serializers 


class UserModelSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ['id', 'username', 'email', 'password'] 

같은 시리얼을 생성, 또한 암호가 생성되고이 해시되지 않는다 역시 문자열 일뿐입니다.

저는 파이썬 셸에서 이렇게했습니다. (또한 너무 ID를 가지고 하나를 시도했지만 결과는 내가 다시 붙여 귀찮게하지 않았다 동일) 내가 user1_s를 실행할 때이가

UserModelSerializer(<User: username>): 
id = IntegerField(label='ID', read_only=True) 
username = CharField(help_text='Required. 150 characters or fewer. Letters, digits and @/./+/-/_ only.', max_length=150, validators=[<django.contrib.auth.validators.ASCIIUsernameValidator object>, <UniqueValidator(queryset=User.objects.all())>]) 
email = EmailField(allow_blank=True, label='Email address', max_length=254, required=False) 
password = CharField(max_length=128) 

실행 user1_s.data

왔다

user1 = User.objects.create(username='username', email='[email protected]', password='password') 

user1_s = UserModelSerializer(user1) 

{'username': u'username', 'password': u'password', 'id': 4, 'email': u'[email protected]'} 

실행 user1_s = UserModelSerializer(data=user1)

실행 user1_s.is_valid()False

을 실행 user1_s.errors

{u'non_field_errors': [u'Invalid data. Expected a dictionary, but got User.']} 

을 반환 -------------------------------- --- 누군가 내가이 잘못을하고 있음을 알려주시고 나를 올바른 방향으로 안내해주십시오.

미리 감사

답변

1

사용자는 여기에서 오해의 수 있습니다.

먼저 암호를 해시하는 메서드를 호출하지 않으므로 암호가 해시되지 않습니다. 사용자를 만들 때 create이 아닌 create_user을 항상 호출해야합니다. 암호를 해시하는 것은 전자입니다.

user1 = User.objects.create_user(username='username', email='[email protected]', password='password') 

두 번째 이유 user1_s 명확 오류 메시지에 설명되어 무효 : 사용자가 밖으로 객체 시리얼 라이저로 데이터를 전달하고 싶어 할 때, 당신은 실제로에서가 아니라 데이터의 사전을 통과해야 User 객체

그래서, 테스트,이 작동합니다 :

user1_serialize = UserModelSerializer(user1) 
data = user1_serialize.data 
user1_deserialize = UserModelSerializer(data=data) 
user1_deserialize.is_valid() 
관련 문제