Django Academy · Урок

OneToOneField для профилей

Расширяйте модель связанной записью

Урок 3 из 413 шагов

«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 — локальная установка не требуется.

Все уроки этого курса

  1. ForeignKey и on_delete
  2. ManyToManyField и промежуточные модели
  3. OneToOneField для профилей
  4. related_name и обратный поиск
← Назад к Django Academy