OneToOneField для профилей
Расширяйте модель связанной записью
«OneToOneField для профилей» — бесплатный урок Django Academy на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Django Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Django Academy содержит 4 уроков всего.
Ровно один объект с каждой стороны
Иногда одна строка соответствует ровно одной другой строке в обоих направлениях. Это связь один к одному, удобная для аккуратного разделения данных.
Шаблон Profile
Классический пример — профиль пользователя: у каждого пользователя один профиль, и каждый профиль принадлежит одному пользователю. Дополнительные поля хранятся отдельно.
Объявление OneToOneField
Добавьте OneToOneField, указывающее на другую модель. Оно работает как ForeignKey со встроенной гарантией уникальности.
class Profile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)Уникальность внутри
OneToOneField на самом деле является ForeignKey с признаком unique. Это ограничение не позволяет двум профилям принадлежать одному пользователю.
on_delete по-прежнему применяется
Как и любая связь, это поле требует on_delete. При использовании CASCADE удаление пользователя за один шаг удалит и его профиль.
user = models.OneToOneField(User, on_delete=models.CASCADE)Почему просто не добавить поля?
Можно было бы добавить поля в исходную модель, но отдельный профиль сохраняет структуру аккуратной и не требует изменять таблицы, которыми Вы не владеете.
Прямой доступ
Из профиля можно напрямую получить связанного пользователя через поле. Оно возвращает единственный связанный объект.
profile = Profile.objects.first()
print(profile.user.username)Обратный доступ
Обратная сторона устроена особым образом: из пользователя можно получить профиль с помощью имени модели в нижнем регистре, без суффикса _set.
user = User.objects.first()
print(user.profile.bio)Создание профиля
Создайте профиль, передав пользователя, с которым он связан. Ограничение уникальности не позволит создать вторую запись профиля для того же пользователя.
Profile.objects.create(user=user, bio="Hello!")Автоматическое создание с помощью сигналов
Распространённый приём — сигнал post_save, который создаёт профиль сразу после создания пользователя, чтобы пара всегда существовала.
Запросы через пару
Фильтруйте через связь с помощью двойного подчёркивания, обращаясь к полям профиля со стороны пользователя или наоборот.
User.objects.filter(profile__bio__icontains="django")Быстрая проверка
У каждого пользователя может быть не более одного профиля, и у каждого профиля — один пользователь. Какое поле задаёт такую связь?
Итоги
Отличная работа! OneToOneField уникально соединяет две строки, а обратный доступ выполняется через имя модели в нижнем регистре. 👤
Изучай Python с ИИ-репетитором — бесплатно
Пиши и запускай код прямо в браузере, получай мгновенную помощь от ИИ-репетитора 24/7 и продолжи учиться на сайте или в приложении.
- Курсы
- 30
- Уроки
- 120
Часто задаваемые вопросы
Урок «OneToOneField для профилей» бесплатный?
Да — полный текст урока «OneToOneField для профилей» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Django Academy, подпишись на CoddyKit PRO. Курс Django Academy содержит 4 уроков всего.
Чему я научусь в уроке «OneToOneField для профилей»?
Расширяйте модель связанной записью Ты практикуешь Django Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Django Academy?
Предыдущий опыт не требуется. Django Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.
Сколько времени занимает урок «OneToOneField для профилей»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Django Academy?
Да. Каждый урок Django Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- ForeignKey и on_delete
- ManyToManyField и промежуточные модели
- OneToOneField для профилей
- related_name и обратный поиск