Сериализация и создание отношения один-к-одному с родительской_ссылкой true в django и django rest framework

Как сохранить объект с отношением один-к-одному и имеющий parent_link=True с помощью сериализатора. Ниже приведены мои модели и сериализатор, содержащий некоторые поля из реальной модели, которую я хотел реализовать. Я не могу сохранить отношение 'user' в базе данных. Оно выдает ошибку целостности.

class Audit(models.Model):
   is_active = models.BooleanField(default=True)
   created_at = models.DateTimeField(auto_now_add=True, null=True)
   updated_at = models.DateTimeField(auto_now=True, null=True)

   class Meta:
      abstract = True

class User(Audit):
    class Meta:
        db_table = 'user'

    email = models.EmailField(unique=True)
    password = models.TextField()
    is_active = models.BooleanField(default=False)


class UserProfile(User):
    class Meta:
        db_table = 'user_profile'

    user = models.OneToOneField(User, on_delete=models.CASCADE, parent_link=True,
                            primary_key=True)
    address = models.TextField(null=True)
    dob = models.DateField()
    language = models.CharField(max_length=50, null=True) 

class UserProfileSerializer(serializers.ModelSerializer):
    class Meta:
        model = UserProfile
        fields = ['user', 'address', 'dob', 'language']

Запрашиваемые данные выглядят следующим образом. { "email": "abc@pqr.com", "password": "1234", "dob": "2021-12-11", "language" : "English" }

Вы можете передавать пользователя при сохранении сериализатора :

serializer.save(user=<USER>)

Обратите внимание, что если вы хотите создать пользователя при создании профиля пользователя, вам следует переопределить метод create() в вашем сериализаторе, сначала создать пользователя, затем создать профиль пользователя и передать ему созданного пользователя

Вернуться на верх