Я хочу сохранить пользователя, а также информацию о пользователе в дополнительную дату, когда пользователь регистрируется по API остальных.
Когда пользователь сохраняется, я хочу сохранить эти данные дополнительности в таблицу userDetails с помощью User ForeingKey. Это должно быть сделано RegisterSerializer.
Я использую django-rest-auth.
У меня есть модели:
class User(AbstractUser):
# First Name and Last Name do not cover name patterns
# around the globe.
name = CharField(_("Name of User"), blank=True, max_length=255)
is_partner = BooleanField(_('User is partner'), default=False)
def get_absolute_url(self):
return reverse("users:detail", kwargs={"username": self.username})
class UserDetails(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
address = models.CharField(max_length=200, blank=True)
city = models.CharField(max_length=100, blank=True)
zip_code = models.CharField(max_length=20, blank=True)
country = models.CharField(max_length=30, blank=True)
def __str__(self):
return self.user.username
и сериализаторы
class UserDetailsSerializer(serializers.ModelSerializer):
user = UserSerializer(read_only=True)
class Meta:
model = UserDetails
fields = "__all__"
class UserRegisterSerializer(RegisterSerializer):
is_partner = serializers.BooleanField(default=False)
address = serializers.CharField(max_length=200)
city = serializers.CharField(max_length=100)
zip_code = serializers.CharField(max_length=20)
country = serializers.CharField(max_length=30)
def get_cleaned_data(self):
super(UserRegisterSerializer, self).get_cleaned_data()
return {
'password1': self.validated_data.get('password1', ''),
'email': self.validated_data.get('email', ''),
'name': self.validated_data.get('name', ''),
'address': self.validated_data.get('address', ''),
'city': self.validated_data.get('city', ''),
'zip_code': self.validated_data.get('zip_code', ''),
'country': self.validated_data.get('country', ''),
}