user - examples - django template variable
Cómo agregar userprofile a UserDetailsSerializer en django (1)
Intentando agregar el userprofile
de user
modelo de user
usando :
marco de descanso django.
módulo rest-auth
Pero el profile = instance.userprofile
línea profile = instance.userprofile
da error :
*** django.db.models.fields.related.RelatedObjectDoesNotExist: User has no userprofile.
siguiendo las instrucciones de aquí
Además, no estoy seguro de lo que está sucediendo en la declaración super
Posibles errores:
1. instance
no está teniendo userprofile
después de la declaración super
, por lo tanto,
profile = instance.userprofile
declaración dando error
2. userprofile
usuario debe ser agregado a UserDetailsSerializer
UserDetailsSerializer
class UserDetailsSerializer(serializers.ModelSerializer):
class Meta:
model = get_user_model()
fields = (''username'', ''email'', ''first_name'', ''last_name'')
read_only_fields = (''email'', )
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
Solicite más claridad si es necesario.
Gracias por adelantado.
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: