Я сейчас использую Django, и моя модель похожа на эту.
class City(models.Model):
name = models.CharField(max_length=255, primary_key=True)
url = models.URLField()
class Paper(models.Model):
city = models.ForeignKey(City)
name = models.CharField(max_length=255)
price = models.IntegerField()
class Article(models.Model):
paper = models.ForeignKey(Paper)
name = models.CharField(max_length=255)
Я пытаюсь получить объект "Город", несколько объектов "Бумага" и несколько объектов "Статья" путем фильтрации по названию города и цене бумаги.
Для поиска по таблице City я могу сделать это:
cities = City.objects.get(pk='Toronto')
Чтобы получить объекты Paper:
papers = Paper.objects.filter(city=cities, price < 5)
или я мог бы даже объединить два:
papers = cities.paper_set.filter(city=cities, price < 5)
(Будет ли это эффективнее?)
Проблема в том, чтобы найти эффективный способ получить все статьи из вышеприведенных «статей».
Я не могу использовать paper.article_set, так как paper - это QuerySet. И если я попытаюсь использовать цикл, он, вероятно, будет делать запросы один раз для каждого бумажного объекта, верно?
Для справки: таблица City содержит 1000 столбцов, в каждом городе 1-1000 объектов Paper и около 10 объектов Article на каждый объект Paper.
Любая помощь будет по достоинству оценена.
Спасибо.
Edit:
Если у меня есть QuerySet для городов (см. Выше), есть ли способ получить все объекты Article в одном запросе?