0

次のようなクエリがあります。

Listing.objects.all().order_by('-premium', 'title')

期待どおりに機能し、最初にすべてのプレミアム クラスを返し、次にすべてをタイトル順に返します。

ここで、結果の順序のみをランダム化する必要がありpremiumます。それは可能ですか?

4

2 に答える 2

0

わかりました、単一のクエリには解決策がないと思います。
だから私は2つのクエリを使用してこれを解決しました:

premium_results = Listing.objects.filter(premium=True).order_by('?')
normal_results = Listing.objects.filter(premium=False).order_by('title')

results = list(premium_results) + list(normal_results)

Q注: 出力としてリストが必要でした。それ以外の場合は、Django のオブジェクトを使用してクエリの結果を組み合わせることができます。

于 2012-11-09T14:38:44.120 に答える
0

なしorder_byでソートするために再び使用できますtitlepremium

qs=Listing.objects.filter().order_by('-premium', 'title')
qs2 = qs.order_by('title') # will be sorted on 'title' not 'premium'

またはショートカット

Listing.objects.filter().order_by('-premium', 'title').order_by('title')

注:初期設定としてのfilter()代わりに使用しています。all()

于 2012-11-08T12:56:13.647 に答える