Как добавить userprofile в UserDetailsSerializer в django

Пытаюсь добавить userprofile в user модель

используя:
Джанго каркас отдыха.
модуль rest-auth

Но линия profile = instance.userprofile давать ошибку:
*** django.db.models.fields.related.RelatedObjectDoesNotExist: User has no userprofile.

следующие инструкции здесь

Кроме того, не уверен, что происходит в super заявление

Возможные ошибки:
1.instance не имея userprofile после super утверждение, следовательно
profile = instance.userprofile ошибка в заявлении
2.userprofile должен быть добавлен к 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

Просите больше ясности, если требуется.
Заранее спасибо.

1 ответ

В документации предполагается, что профиль пользователя уже создан и теперь может быть обновлен. Вам просто нужен чек

# get and update user profile
    try:
        profile = instance.userprofile
    except UserProfile.DoesNotExist:
        profile = UserProfile()
    if profile_data and company_name:
Другие вопросы по тегам