validacion usuarios usuario sesiones modelo manejo grupos gestion administrar django django-rest-framework user-profile django-serializer

django - usuarios - cómo definir un perfil de usuario en UserDetialsSerializer?



modelo de usuarios django (2)

Deseo poder acceder a una instancia de userprofile través de:
profile = instance.userprofile statement en UserSerializer

instance se crea a través de:
instance = super(UserSerializer, self).update(instance, validated_data) en UserSerializer

Como UserSerializer hereda UserDetailsSerializer , creo que debería definir un userprofile de UserDetailsSerializer en UserDetailsSerializer .
Pero no sé cómo hacerlo?

Pregunta: ¿Cómo definir userprofile en UserDetailsSerializer para lograr lo anterior?

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'', )

Modelo de perfil de usuario :

class UserProfile(models.Model): user = models.OneToOneField(User) # custom fields for user company_name = models.CharField(max_length=100)

¿Pregunta si se requiere más claridad?


Creo que he respondido uno similar aquí

En la documentación , se supone que userprofile ya se creó y ahora se puede actualizar. Solo necesitas un cheque

# get and update user profile try: profile = instance.userprofile except UserProfile.DoesNotExist: profile = UserProfile() if profile_data and company_name:


Creo que quieres que un campo de método de serialización sea parte de tu serializador. (No entiendo completamente tu pregunta);

class UserDetailsSerializer(serializers.ModelSerializer): user_related = serializers.Field(source=''method_on_userprofile'') class Meta: model = UserProfile fields = (''username'',''email'', ''first_name'', ''user_related'', ) read_only_fields = (''email'', ''user_related'',)