2017-05-23 12 views
0

申し訳ありませんが、愚かな質問です。Djangoフィルターの制限オブジェクト

このソリューションまたはそのキーワードの参照先はわかりません。

は、私は2つのモデルの場所とヒントを持っている、と、言ってみましょう:

# list of place id 
place_id_list = [...] 

どのように私はちょうど< = 5のヒントがここにすべての場所

ためのオブジェクト取得することであるplace_id_listオーバーのヒントをフィルタリングしますモデル:

0123:

class Place: 
    ... 
class Tip: 
    # object_id is id of place 
    object_id = models.PositiveIntegerField(editable=False) 
    content_type = models.ForeignKey(ContentType) 

今、私は同じようにループためを使用します

tip_list = [] for place_id in place_id_list: tip_list += Tip.objects.filter(object_id=place_id, content_type...)[0:5] 

しかし、このクエリは遅くなるようです。

もっと良い解決策はありますか?

ありがとうございました。新しいオブジェクトが必要とされない限り

答えて

1
tip_list = []  
for place_id in place_id_list: 
    tip_list += Tip.objects.filter(object_id=place_id, content_type...)[:5] 

あなたはDjangoが怠惰ローダとdoesntのである知っているように、このよりも良い方法は、ありませんが、データベースを打つ、

0

は、クエリ以下で試してみてください:

tip_list =Tip.objects.filter(object_id__in=place_id_list, content_type...)[:5] 

参照リンク:

https://docs.djangoproject.com/en/dev/topics/db/queries/#the-pk-lookup-shortcut

+0

いいえ、それは最初のfiを返します。私はすべての場所で5つのヒントを取得し、それらにプッシュしたい** tip_list ** –

+0

オハイオ州、place_id_listを反復する必要があります、それは解決策です:) –

+0

私が質問に示した解決策は同じ :) –

関連する問題