次のようなクエリがあります。
Listing.objects.all().order_by('-premium', 'title')
期待どおりに機能し、最初にすべてのプレミアム クラスを返し、次にすべてをタイトル順に返します。
ここで、結果の順序のみをランダム化する必要がありpremium
ます。それは可能ですか?
次のようなクエリがあります。
Listing.objects.all().order_by('-premium', 'title')
期待どおりに機能し、最初にすべてのプレミアム クラスを返し、次にすべてをタイトル順に返します。
ここで、結果の順序のみをランダム化する必要がありpremium
ます。それは可能ですか?
わかりました、単一のクエリには解決策がないと思います。
だから私は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 のオブジェクトを使用してクエリの結果を組み合わせることができます。
なしorder_by
でソートするために再び使用できますtitle
premium
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()