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

Получение данных многие ко многим в Django

В предыдущем уроке мы связали посты и теги через ManyToManyField. Напомним структуру таблиц:

posts

  • id
  • title

tags

  • id
  • name

post_tags

  • id
  • post_id
  • tag_id

Теги поста доступны через поле tags. Давайте получим пост и выведем его теги:

from main.models import Post post = Post.objects.get(id=1) tags = post.tags.all() for tag in tags: print(tag.name)

С обратной стороны Django создает менеджер post_set (или имя из related_name). Давайте получим тег и выведем его посты:

from main.models import Tag tag = Tag.objects.get(id=1) posts = tag.post_set.all() for post in posts: print(post.title)

Связи можно менять методами менеджера. Метод add добавляет тег посту:

python = Tag.objects.get(name='python') post = Post.objects.get(id=1) post.tags.add(python)

Метод set заменяет весь набор связей новым списком:

python = Tag.objects.get(name='python') django = Tag.objects.get(name='django') post = Post.objects.get(id=1) post.tags.set([python, django])

Метод remove убирает одну связь:

post.tags.remove(python)

Получите студента вместе с курсами, которые он проходил.

Получите курс вместе со студентами, которые его проходили.

Добавьте студенту два курса через add, затем уберите один через remove.

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