首页 > 解决方案 > Django:“订购”基于布尔字段的查询集

问题描述

我想以Menù这种方式获取所有实例:

- 在那些已my_boolean_field设置为的实例的顶部位置True

-在最后位置那些已my_boolean_field设置为的实例False

这是我的Menù模型和我的查询:

class Menù(models.Model):
    id_menù = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, unique=True)
    my_boolean_field = models.BooleanField(default=False)

# In my View:
my_query_set = Menù.objects.all().order_by('my_boolean_field')

我也搜索了一个group_by选项,但在 Django ORM 中没有找到任何内容

标签: django

解决方案


您可以添加-order_by查询中以按降序排序,如下所示:

my_query_set = Menù.objects.all().order_by('-my_boolean_field')  # first get True ones then get False ones

另一种方法是像这样添加ordering到您的模型Meta类中:

class Menù(models.Model):
    id_menù = models.AutoField(primary_key=True)
    name = models.CharField(max_length=100, unique=True)
    my_boolean_field = models.BooleanField(default=False)

    class Meta:
        ordering = ('-my_boolean_field ',)

在此更改后,您的查询my_boolean_field将默认按降序排序,无需使用order_by('-my_boolean_field')

my_query_set = Menù.objects.all()  # results will be sorted by my_boolean_field in reverse order

推荐阅读