РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
⊗pydjPmMROTO 144 of 187 menu

Связь один к одному в Django

Связь один к одному - это когда одна запись одной таблицы соответствует одной записи другой таблицы.

Давайте посмотрим на примере. Пусть у нас есть следующая таблица с постами:

posts

  • id
  • title

Каждый пост имеет одну картинку-миниатюру. Картинки хранятся в отдельной таблице:

thumbnails

  • id
  • path
  • alt
  • post_id

Таблица миниатюр связана с таблицей постов через поле post_id. Так как одному посту соответствует одна миниатюра, получается связь один к одному. Мы можем прописать эту связь в моделях. Тогда при получении поста вместе с ним удобно будет получать и миниатюру.

Давайте сделаем это. Создадим модель для постов:

from django.db import models class Post(models.Model): title = models.CharField(max_length=200)

Создадим модель для миниатюр:

class Thumbnail(models.Model): path = models.CharField(max_length=255) alt = models.CharField(max_length=100)

В модели миниатюр добавим поле связи OneToOneField. Параметр on_delete=models.CASCADE говорит Django: если пост удалили - удалить и его миниатюру:

class Thumbnail(models.Model): post = models.OneToOneField( Post, on_delete=models.CASCADE ) path = models.CharField(max_length=255) alt = models.CharField(max_length=100)

Полный код обеих моделей будет таким:

from django.db import models class Post(models.Model): title = models.CharField(max_length=200) class Thumbnail(models.Model): post = models.OneToOneField( Post, on_delete=models.CASCADE ) path = models.CharField(max_length=255) alt = models.CharField(max_length=100)

Сделайте следующие таблицы:

employees

  • id
  • name
  • surname
  • age

contacts

  • id
  • email
  • phone
  • employee_id

Свяжите эти таблицы отношением один к одному через OneToOneField.

Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить