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

Обратная сторона ForeignKey в Django

Мы уже умеем из поста получить категорию. Теперь сделаем наоборот: из категории получим все ее посты. Структура таблиц та же:

categories

  • id
  • name

posts

  • id
  • title
  • category_id

Со стороны категории Django сам создает обратный доступ к постам. По умолчанию это менеджер post_set: имя связанной модели в нижнем регистре плюс _set.

Давайте получим категорию и выведем ее посты:

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

Имя post_set не всегда удобно. Его можно задать самому через параметр related_name у ForeignKey:

class Post(models.Model): title = models.CharField(max_length=200) category = models.ForeignKey( Category, on_delete=models.CASCADE, related_name='posts' )

Теперь посты категории доступны как category.posts.all():

category = Category.objects.get(name='News') posts = category.posts.all() for post in posts: print(post.title)

Можно получить все категории и для каждой вывести посты:

categories = Category.objects.all() for category in categories: print(category.name) for post in category.posts.all(): print(' -', post.title)

Получите одну страну вместе с ее городами через city_set.

Добавьте related_name='cities' и получите города страны через новое имя.

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

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