Serj-B
@Serj-B
i am lamer0k =/

Django orm — сохранение в связанные таблицы?

Есть 3 таблицы со связью, стандартная модель User и:

class Place(models.Model):
    place = models.CharField()
    status = models.CharField()

class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    place = models.ForeignKey(Place, on_delete=models.CASCADE)
    detail = models.CharField()


При регистрации пользователя нужно разнести и сохранить данные по соответствующим таблицам. Собственно вопрос, как это сделать сразу получив связи?
  • Вопрос задан
  • 517 просмотров
Решения вопроса 1
@immaculate
Программист-путешественник
В 2018 году в Django разносить данные пользователя по двум раздельным таблицам User и Profile — категорически неправильно! Django уже года 4 как минимум позволяет создать собственную модель User со всеми необходимыми полями. Такой код будет намного проще писать и поддерживать, а еще исчезнет вагон и маленькая тележка JOIN'ов, необходимых для догрузки Profile.

А по сути вопроса: до сохранения экземпляра модели в базе, создавать связанные модели нельзя, так как Django необходимо знать первичный ключ User для их создания, а он генерируется в процессе сохранения модели.

Есть пакет, позволяющий обойти это ограничение: django-modelcluster, но в вашем случае целесообразнее переписать модель пользователя.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@marataziat
Джангист-тракторист
AbstractBaseUser.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы