2016-07-19 6 views
0

私は私のDjangoアプリ、ProjectとProjectCategoryに2つのモデルがあり、プロジェクトはこの多値フィールドカテゴリを持っています。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で新しく、効率的にやる方法がわかりません。今のようにコード内で新しいクエリを作成しているのかどうかはわかりません。このための最良の方法は何でしょうか?ありがとう!

答えて

0

あなたが.prefetch_relatedするために、複数のルックアップに渡すことができます()

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

それがどのように動作しますか?私はそれがリストを "保存"することを理解していますが、私が.filter()を呼び出すと、データベースへの新しいクエリは作成されませんが、代わりにPythonでフィルタリングされますか? –

+0

QuerySetsは遅延です。 https://docs.djangoproject.com/en/1.9/ref/models/querysets/#when-querysets-are-evaluated – okuznetsov

関連する問題