Python:如何在没有更多查询的情况下搜索列表中的多值字段?

时间:2016-07-19 16:25:59

标签: python django django-models

我的Django应用程序中有两个模型,Project和ProjectCategory,而Project有这个多值字段 category

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 的列表中,现在我想为每个类别制作项目列表,但我想在不制作任何项目的情况下进行其他查询。

所以我必须搜索每个项目 category 字段中存在的每个类别(这是在对象列表中搜索对象)

portfolio = Project.objects.all().order_by('name')
categories = ProjectCategory.objects.all()
for category in categories:
    portfolio.filter(category__name=category.name)

...但我是Python的新手,我不知道如何有效地做到这一点。我不确定我是否会像现在一样在代码中创建新查询。对此最好的方法是什么?谢谢!

1 个答案:

答案 0 :(得分:0)

您可以将多个查找传递给.prefetch_related()

portfolio = Project.objects.all().order_by('name').prefetch_related()