Django:根据布尔字段“订购”一个查询集

Taj*_*ngh 7 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')
Run Code Online (Sandbox Code Playgroud)

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

sho*_*ner 17

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

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

另一种方法是添加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 ',)
Run Code Online (Sandbox Code Playgroud)

在此更改后,您的查询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
Run Code Online (Sandbox Code Playgroud)