Я использую django -rest-auth для обработки входа и регистрации. Проблема, с которой я столкнулся, заключается в том, что я хотел бы добавить некоторые пользовательские поля в значение по умолчанию django User model
. Я видел, как они покрывали это в своих документах, и я попытался воспроизвести их пример из здесь , но когда я делаю запрос PUT для вновь созданного поля из userprofile, я получаю эту ошибку:
RelatedObjectDoesNotExist at /rest-auth/user/
User has no userprofile.
Request Method: PUT
Request URL: http://localhost:8000/rest-auth/user/
Django Version: 2.2.10
Exception Type: RelatedObjectDoesNotExist
Exception Value:
User has no userprofile.
Exception Location: /home/terkea/django_react_template/src/venv/lib/python3.6/site-packages/django/db/models/fields/related_descriptors.py in __get__, line 415
Python Executable: /home/terkea/django_react_template/src/venv/bin/python
Python Version: 3.6.9
Python Path:
['/home/terkea/django_react_template/src',
'/usr/lib/python36.zip',
'/usr/lib/python3.6',
'/usr/lib/python3.6/lib-dynload',
'/home/terkea/django_react_template/src/venv/lib/python3.6/site-packages']
Server time: Fri, 10 Apr 2020 14:56:41 +0000
Это моя модель
from django.db import models
from django.conf import settings
from django.contrib.auth.models import User
class UserProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
company_name = models.CharField(max_length=100, default=None)
, а вот мой сериализатор:
from rest_framework import serializers
from rest_auth.serializers import UserDetailsSerializer
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
Я предполагаю, что запись userprofile должна быть создана одновременно, когда пользователь, но я не знаю, как именно я должен это сделать.