我希望能夠通過訪問userprofile
實例:
profile = instance.userprofile
聲明UserSerializer
如何在UserDetialsSerializer中定義一個userprofile?
instance
創建通過:
instance = super(UserSerializer, self).update(instance, validated_data)
聲明 UserSerializer
由於UserSerializer
在繼承UserDetailsSerializer
,我想我應該在UserDetailsSerializer
中定義userprofile
。
但我不知道該怎麼做?
問題:如何定義userprofile
中的UserDetailsSerializer
來達到上述目的?
UserSerializer:
class UserSerializer(UserDetailsSerializer):
company_name = serializers.CharField(source="userprofile.company_name")
class Meta(UserDetailsSerializer.Meta):
fields = UserDetailsSerializer.Meta.fields + ('company_name',)
def update(self, instance, validated_data):
profile_data = validated_data.pop('userprofile', {})
company_name = profile_data.get('company_name')
instance = super(UserSerializer, self).update(instance, validated_data)
# get and update user profile
profile = instance.userprofile
if profile_data and company_name:
profile.company_name = company_name
profile.save()
return instance
UserDetailsSerializer:
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = ('username','email', 'first_name', 'last_name')
read_only_fields = ('email',)
用戶配置型號:
class UserProfile(models.Model):
user = models.OneToOneField(User)
# custom fields for user
company_name = models.CharField(max_length=100)
請問是否需要更清晰?