Django中QuerySet中子集或结果的随机顺序

时间:2012-11-08 12:48:16

标签: django django-queryset

我有这样的查询:

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

它按预期工作,首先返回所有高级类,然后按标题排序。

现在我只需要随机化premium结果的顺序。这可能吗?

2 个答案:

答案 0 :(得分:0)

您可以再次使用order_bytitle进行排序,而不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()作为初始设置。

答案 1 :(得分:0)

好的,我认为单个查询中没有解决方案 所以我用两个查询解决了这个问题:

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对象组合查询结果。