0

そのモデルのデータベースに 30 個未満のアイテムがある場合でも、Django ORM を使用して 30 個のアイテムを返したいと考えています。重複を返すことを意味する場合でも、これだけ多くのアイテムを返すように強制する方法はありますか?

projects = Project.objects.filter(approved=True).order_by('?')[0:30]

これは可能ですか?上記のコードは、データベースにあるアイテムの数として 4 つのアイテムを返します。

プロジェクト変数を操作して 30 個のアイテムを含める方がよいでしょうか? プロジェクトをランダム化してほしい。

4

2 に答える 2

7

結果セットが30以上のオブジェクトでitertools.cycleある場合は問題ありません.1つの方法は、十分でない場所に使用することです...(最初からデータの繰り返しを開始します)....を使用して制限しますitertools.islice.

from itertools import islice, cycle
always_30_results = islice(cycle(result_set), 30))
for result in always_30_results:
    print result # or whatever
于 2012-11-30T15:31:21.687 に答える
0

いいえ、できません。N 個のオブジェクトに到達するまで、結果を連結する必要があります。ここで、N は必要な数です。

于 2012-11-30T15:30:33.167 に答える