1

私はこのロジックを実行しようとしています:

1. take all objects
2. filter them: all objs which has rate value >= 4
3. then take randomly 4 out of them. 

その中からランダムに4つ取るにはどうすればいいですか?端から切るだけでなく

これは私のコードです:
MyObj.objects.filter(objects__rate__gte=4).distinct('id').order_by('-id')[:4]

4

3 に答える 3

2

多分あなたは使うことができます:

random.sample(population, k)

シーケンスkから選択された一意の要素の長さのリストを返します。population置換なしの無作為抽出に使用

http://docs.python.org/2/library/random.html#random.sample

于 2013-07-16T08:13:40.687 に答える
1

Django には、ランダムに並べ替えるオプションがあります。これは、 を使用して行われ.order_by('?')ます。

したがって、コードは次のようになります。

MyObj.objects.filter(rate__gte=4).distinct('id').order_by('?')[:4]

実際には、ここで表示できるdjangoドキュメントに記載されていますhttps://docs.djangoproject.com/en/dev/ref/models/querysets/#order-by

于 2013-07-16T08:13:21.777 に答える
1
foo = MyObj.objects.filter(objects__rate__gte=4) # step 1 & 2
random.sample(list(foo), 4) # step 3 (will contain duplicates)
random.sample(set(foo), 4) # step 3, only uniques
于 2013-07-16T08:43:29.160 に答える