2016-11-19 18 views
0

私は、CustomUserモデルとそのシリアライザを使用して、新しいユーザを登録して表示しようとしています。登録ユーザを取得しようとするとエラーが発生する

class CustomUser(models.Model): 
user = models.OneToOneField(User) 
additional_field = models.CharField(max_length=30, default='', blank=True) 

Django REST Framework Creating custom userから)私のシリアライザ:ここ

は私のモデルであり、それぞれ

class CustomUserSerializer(serializers.ModelSerializer): 
additional_field = serializers.CharField(source='customuser.additional_field') 
class Meta: 
    model = User 
    fields = ('id', 'username', 'password', 'first_name', 'last_name', 'email', 'additional_field') 

def create(self, validated_data): 
    profile_data = validated_data.pop('customuser', None) 
    user = super(CustomUserSerializer, self).create(validated_data) 
    self.create_or_update_profile(user, profile_data) 
    return user 

def update(self, instance, validated_data): 
    profile_data = validated_data.pop('customuser', None) 
    self.create_or_update_profile(instance, profile_data) 
    return super(CustomUserSerializer, self).update(instance, validated_data) 

def create_or_update_profile(self, user, profile_data): 
    profile, created = CustomUser.objects.get_or_create(user=user, defaults=profile_data) 
    if not created and profile_data is not None: 
     super(CustomUserSerializer, self).update(profile, profile_data) 

私のビュー、ユーザーを表示し、登録する:

def get_all_users(request): 

all_friends = CustomUser.objects.all() 

serial = CustomUserSerializer(all_friends, many=True) 
json_data = JSONRenderer().render(serial.data) 

return HttpResponse(json_data, content_type='application/json') 


@api_view(['POST']) 
def register_new_user(request): 

if request.method == 'POST': 
    print('POST request !') 

    print(request.data) 
    serializer = CustomUserSerializer(data=request.data) 

    if serializer.is_valid(): 

     serializer.save() 
     print('save friend!') 
     return HttpResponse(status.HTTP_201_CREATED) 

    else: 
     print(serializer.errors) 
     return HttpResponse(status.HTTP_403_FORBIDDEN) 

ながら次のコードを使用してユーザーを登録できます:

import requests 
import json 

json_data = {'username': 'mylogin99', 'password': 'mypassword', 'email': '[email protected]', 'additional_field' : 'myaddfield'} 
r = requests.post('http://127.0.0.1:8000/register_new_user', json=json_data) 

私は次のエラーを取得するように私は、登録ユーザーを表示することができません:

AttributeError at /getAllUsers 
Got AttributeError when attempting to get a value for field `username` on serializer `CustomUserSerializer`. 
The serializer field might be named incorrectly and not match any attribute or key on the `CustomUser` instance. 
Original exception text was: 'CustomUser' object has no attribute 'username'. 

usernameフィールドはUserモデルのusernameフィールドを参照していない理由を私は理解していません。

+0

'CustomUser'にはユーザー名フィールドがありません。 'user'と' additional_field'の2つのフィールドがあります。 –

答えて

0

私が思い付くことができる最高の方法はCustomUserモデルでas_json方法を実装しました:

:すべての登録ユーザーを取得するには、このように

def as_json(self): 
    return dict(
     id=self.user.id, username=self.user.username, 
     password=self.user.password, email=self.user.email, 
     additional_field=self.additional_field) 

を、私はget_all_user方法を変更しました

@api_view(['GET']) 
def get_all_users(request): 

    # retrieve all CustomUser objects 
    all_friends = CustomUser.objects.all() 
    lst = [friend.as_json() for friend in all_friends] 
    json_data = JSONRenderer().render(lst) 

    return HttpResponse(json_data, content_type='application/json') 
関連する問題