У меня есть две модели в моем приложении Django, Project и ProjectCategory, а Project имеет это многозначное поле Категория.Python: как искать многозначное поле в списке БЕЗ дополнительных запросов?
class ProjectCategory(models.Model):
name = models.CharField(max_length=200)
...
class Project(models.Model):
category = models.ManyToManyField(ProjectCategory)
name = models.CharField(max_length=40)
...
Я извлечение всех объектов проекта и сохранение их в списке, называемый портфеля, и теперь я хочу, чтобы сделать списки проектов для каждой категории, но я хочу сделать это без каких-либо дополнительных запросов.
Так что я должен искать для каждой категории, если она существует в каждом проекте категории поле (это, поиск объекта в списке объектов)
portfolio = Project.objects.all().order_by('name')
categories = ProjectCategory.objects.all()
for category in categories:
portfolio.filter(category__name=category.name)
... но я новый в Python, и я не знаю, как это сделать эффективно. Я не уверен, создаю ли я новый запрос в коде, как сейчас. Какой был бы лучший подход для этого? Благодаря!
Как это работает? Я понимаю, что он «сохраняет» список, но когда я вызываю .filter(), он не будет делать новый запрос к базе данных, но вместо этого будет фильтроваться на Python? –
QuerySets ленивы. https://docs.djangoproject.com/en/1.9/ref/models/querysets/#when-querysets-are-evaluated – okuznetsov