Проблема с сохранением отношения OneToOne, когда пользователь зарегистрирован - PullRequest
0 голосов
/ 06 ноября 2019

Я хочу сохранить пользователя, а также информацию о пользователе в дополнительную дату, когда пользователь регистрируется по 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', ''),
        }

...