我有这样的查询:
Listing.objects.all().order_by('-premium', 'title')
它按预期工作,首先返回所有高级课程,然后返回按标题排序的所有内容。
现在我只需要随机化premium
结果的顺序。那可能吗?
我有这样的查询:
Listing.objects.all().order_by('-premium', 'title')
它按预期工作,首先返回所有高级课程,然后返回按标题排序的所有内容。
现在我只需要随机化premium
结果的顺序。那可能吗?
您可以再次使用order_by
to sort on title
withoutpremium
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()
作为初始设置。
好的,我认为单个查询中没有解决方案。
所以我用两个查询解决了这个问题:
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)
注意:我需要一个列表作为输出,否则您可以使用 Django 的Q
对象组合查询结果。