Есть несколько способов сделать это.Самый простой способ - добавить пользовательские поля в сериализатор профилей по одному, используя source mappings;
class ProfileSerializer(serializers.ModelSerializer):
username = serializers.CharField(source='user.username')
email = serializers.CharField(source='user.email')
password = serializers.CharField(source='user.password', write_only=True)
class Meta:
model = Profile
fields = ('title', 'contact_number', 'description', 'location', 'username', 'email', 'password')
def create(self, data):
user_data = data.pop('user')
user = User.objects.create_user(**user_data)
profile = Profile.objects.create(user, **data)
return profile
Другой вариант - создать класс сериализатора для User и использовать доступный для записивложенные сериализаторы.Таким образом, вы можете выполнить проверку и создание экземпляров User в своем собственном сериализаторе и использовать этот сериализатор внутри ProfileSerializer.
При любом подходе вам не нужно ничего менять на стороне представления, вся эта логикабудет обработан в сериализаторах.
Что касается удалений, так как вы определили отношение ForeignKey с on_delete = models.CASCADE , если вы удаляете экземпляр пользователя, связанный экземпляр профиля будет удален.Но вам нужно написать собственный метод удаления, если вы хотите сделать это иначе (удалить пользователя при удалении соответствующего профиля).Но если вам нужна такая тесная связь между пользователем и профилем, лучшим способом было бы расширить класс User, чтобы иметь собственную пользовательскую модель, как предложил Аариф.