2017-07-13 18 views
0

私は等の登録、認証を含むログインアプリをやろうとしている... 私はこのエラーを取得しています:私がチェックしたときに、UserモデルについてOneToOne関係とNestedSerializer問題

AttributeError: Got AttributeError when attempting to get a value for field 'user' on serializer 'PictureUserSerializer'. The serializer field might be named incorrectly and not match any attribute or key on the 'User' instance. Original exception text was: 'User' object has no attribute 'user'.

をしかし、私の管理ページ。ユーザーは適切な情報で登録されています。私はこのエラーがどこから来ているように感じていないし、何か間違ったことをしなければならない。ここに私のコードです:

logginapp/models.py

from django.db import models 
from django.contrib.auth.models import User 

class PictureUser(models.Model): 
    user = models.OneToOneField(User) #OneToOne link to the Django's User Model    
    avatar = models.ImageField(null=True, blank=True, upload_to="avatars/") 

    def username(self, user): 
     return user.username 

    def password(self, user): 
     return user.password 

    def email(self, user): 
     return user.email 

loginapp/serializer.py

from django.core.validators import validate_email 
from django import forms 
from rest_framework import serializers 
from loginapp.models import PictureUser 

class UserSerializer(serializers.ModelSerializer): 
    class Meta: 
     model = User 
     fields = ('username', 'password', 'email') 
     write_only_fields = ('password',) 


class PictureUserSerializer(serializers.ModelSerializer): 
    """                      
    Serializer to put the PictureUser model into JSON           
    """ 
    user = UserSerializer() 

    class Meta: 
     model = PictureUser 
     fields = ('user', 'avatar') 
     read_only_fields = ('created',) 

    def create(self, validated_data): 
     print (validated_data) 
     return User.objects.create_user(validated_data['user']['username'], validated_data['user']['email'], 
      validated_data['user']['password'] 
    ) 

loginapp/view.py

from django.shortcuts import render 
from rest_framework import generics 
from .serializer import PictureUserSerializer 
from .models import PictureUser 

class PictureUserCreateView(generics.ListCreateAPIView): 
    """                      
    This class define the Create behaviour of a PictureUser         
    """ 
    queryset = PictureUser.objects.all() 
    serializer_class = PictureUserSerializer 

    def perform_create(self, serializer): 
     serializer.save() 

答えて

2

あなたはPictureUserSerializerからユーザーを作成する必要がある場合は、その後、

def create(self, validated_data): 
    user_data = validated_data.pop('user') 
    user = User.objects.create_user(**user_data) 
    return PictureUser.objects.create(user = user, **validated_data) 
+0

が魅力のように働きました。ありがとう。 – Addict

0

PictureUserSerializer create methodは、Userインスタンスではなく、PictureUserインスタンスを返す必要があります。