2015-11-01 72 views
1

我延長auth.user模型時返回用戶擴展字段:Django的 - 創建用戶

Modles.py:

class UserProfile(models.Model): 
    user = models.OneToOneField(User, on_delete=models.CASCADE) 
    phone_number = models.CharField(max_length=15) 

這是我UserSerializer。

當我創建的用戶,我可以更新其userprofile場,但我無法弄清楚如何將它添加到系列化的用戶,並返回用戶字段+的擴展字段

class UserSerializer(serializers.ModelSerializer): 

    class Meta: 
     model = User 
     fields = ('id', 'username', 'first_name', 'last_name', 'password',) 
     read_only_fields = ('phone_number',) 
     extra_kwargs = {'password': {'write_only': True}} 

    def create(self, validated_data): 
     user = User(
      first_name=validated_data['first_name'], 
      username=validated_data['username'], 
      last_name=validated_data['last_name'] 
     ) 

     user.set_password(validated_data['password']) 
     user.save() 
     user.userprofile.phone_number = self.initial_data["phone_number"] 
     user.userprofile.save() 
     the_dict = { 
      'id': user.id, 
      'username': user.username, 
      'first_name': user.first_name, 
      'last_name': user.last_name, 
      'phone_number': user.userprofile.phone_number 
     } 

     return the_dict 

正如你所看到的,我想以某種方式將其添加到字典中,但在我的客戶,我只得到了用戶的字段(「ID」,「用戶名」,「FIRST_NAME」,「姓氏」) 。

如何添加phone_number?

回答

1

試試這個:

class UserSerializer(serializers.ModelSerializer): 

    # source is required to show where this field is coming from 
    phone_number = serializers.CharField(source='userprofile.phone_number') 

    class Meta: 
     model = User 
     # Add phone_number to the fields 
     fields = ('id', 'username', 'first_name', 'last_name', 'password', 'phone_number',) 
     read_only_fields = ('phone_number',) 
     extra_kwargs = {'password': {'write_only': True}}  

我評論上面的代碼解釋。

+0

是的,我發現問題後才發現。它效果很好 –