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

Связь многие ко многим в Django

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

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

posts

  • id
  • title

И таблица тегов:

tags

  • id
  • name

Пост может иметь несколько тегов, а один тег может быть у многих постов. В базе такую связь обычно делают через промежуточную таблицу:

post_tags

  • id
  • post_id
  • tag_id

В Django для этого есть поле ManyToManyField. Промежуточную таблицу фреймворк создаст сам - явно описывать ее в простых случаях не нужно.

Давайте создадим модель тега:

from django.db import models class Tag(models.Model): name = models.CharField(max_length=100)

Создадим модель поста и добавим в нее ManyToManyField:

class Post(models.Model): title = models.CharField(max_length=200) tags = models.ManyToManyField(Tag)

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

from django.db import models class Tag(models.Model): name = models.CharField(max_length=100) class Post(models.Model): title = models.CharField(max_length=200) tags = models.ManyToManyField(Tag)

Поле tags ставят на одной из сторон - обычно на той, с которой удобнее думать о связи. С другой стороны Django даст обратный доступ автоматически.

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

students

  • id
  • name
  • surname

courses

  • id
  • name

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

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