Django:根据布尔字段“排序”查询集

时间:2019-03-26 19:13:41

标签: 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中没有找到任何内容

1 个答案:

答案 0 :(得分:1)

您可以将-添加到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