【问题标题】:Random order of a subset or results in QuerySet in Django子集的随机顺序或结果在 Django 中的 QuerySet
【发布时间】:2012-11-08 12:48:16
【问题描述】:

我有一个这样的查询:

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

它按预期工作,首先返回所有高级课程,然后返回按标题排序的所有内容。

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

【问题讨论】:

    标签: django django-queryset


    【解决方案1】:

    您可以再次使用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() 作为初始设置。

    【讨论】:

    • 这样你在第二个order_by中按标题排序。我只需要随机化优质结果,而不是其他结果。
    【解决方案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)
    

    注意:我需要一个列表作为输出,否则您可以使用 Django 的 Q 对象组合查询结果。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-01-19
      • 1970-01-01
      • 2016-01-24
      • 2015-02-24
      • 2022-09-28
      • 1970-01-01
      相关资源
      最近更新 更多