Какой лучший метод добавления новых строк в связанных таблицах через OneToOneField?

Добрый вечер. Предположим, хочу расширить модель пользователя (так легче будет объяснить) вариантом OneToOneField
Возьму код из хабра:
class Profile(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    bio = models.TextField(max_length=500, blank=True)
    location = models.CharField(max_length=30, blank=True)
    birth_date = models.DateField(null=True, blank=True)

Если мы создадим пользователя, например, в админке и обратимся к user.profile.bio, то будет ошибка, что строки в БД нет и таких данных тоже. На хабре рассказывают о сигналах в джанго, которые при добавлении/обновления юзера создают/обновляют строку в таблице Profile. Вариант не плохой, но что будет, если до создания модели Profile было добавлено уже несколько тысяч пользователей? У них снова же не будет этих строк в таблице Profile и строки будут создаваться только для новых пользователей.
Вопрос. Как лучше пользоваться расширением моделей посредством OneToOneField, чтобы не натыкаться на исключения, когда нет связанных строк в БД? Или может лучше как-то по-умолчанию добавлять строки в бд со значениями по умолчанию?
  • Вопрос задан
  • 50 просмотров
Решения вопроса 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
что будет, если до создания модели Profile было добавлено уже несколько тысяч пользователей

Хорошо, если будет миграция, добавляющая профили.

Как лучше пользоваться расширением моделей посредством OneToOneField, чтобы не натыкаться на исключения, когда нет связанных строк в БД?

Добавить обработку исключения.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@AstraVlad
Финансист, консультант, программист-любитель
Тут все зависит от разработчика. Можно добавить значения по умолчанию, можно добавить try-catch блоки, можно добавить логику на проверку существования профиля при логине юзера и предлагать (или даже требовать) его заполнить если нет. Конкретный выбор зависит от ситуации и от того, что больше нравится именно вам.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы