Как добавить 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: