Django自定义查询集按两个字段排序

Django自定义查询集按两个字段排序,django,django-admin,django-queryset,Django,Django Admin,Django Queryset,我需要根据两个不同的因素对Django管理员变更列表视图的查询集进行排序:订单时间和状态 排序时,结果查询集应按降序时间排序,所有项目(item.status==3)位于列表底部。本质上,我试图将所有已完成的订单推到列表的底部,而不管它们的订单\ u时间 这就是模型的外观: def Order(models.Model); order_time = models.DateTimeField(null=True) status = models.PositiveSmallIntegerFi

我需要根据两个不同的因素对Django管理员变更列表视图的查询集进行排序:订单时间和状态

排序时,结果查询集应按降序时间排序,所有项目(
item.status==3
)位于列表底部。本质上,我试图将所有已完成的订单推到列表的底部,而不管它们的
订单\ u时间

这就是模型的外观:

def Order(models.Model);
  order_time = models.DateTimeField(null=True)
  status = models.PositiveSmallIntegerField(choices=ORDER_STATUS, default=ORDER_RECEIVED)
我在将queryset与itertools.chain组合时遇到了麻烦,但由于我是为django更改列表视图执行此操作,因此我特别需要返回queryset

我可以用经理来做这个吗?或者,它们是执行定制SQL的一种方式,从而对qs进行相应的预排序

下面是order queryset的示例:

ORDER ORDER_TIME STATUS 3 12/3 2 8 12/5 2 1 12/6 1 7 12/2 3 10 11/12 3 订单时间状态 3 12/3 2 8 12/5 2 1 12/6 1 7 12/2 3 10 11/12 3
模型的元选项,将给出如下内容:

class Order(models.Model);
    order_time = models.DateTimeField(null=True)
    status = models.PositiveSmallIntegerField(choices=ORDER_STATUS, default=ORDER_RECEIVED)

    class Meta:
        ordering = ('status', 'order_time')

模型的元选项,将给出如下内容:

class Order(models.Model);
    order_time = models.DateTimeField(null=True)
    status = models.PositiveSmallIntegerField(choices=ORDER_STATUS, default=ORDER_RECEIVED)

    class Meta:
        ordering = ('status', 'order_time')

为这些选择做一个模型怎么样

def Status(models.Model):
    # You could put in an 'id' or 'code' field to match up to your current status codes properly
    value = models.CharField(max_length=20)
    importance = models.IntegerField()
然后将您的模型更改为:

class Order(models.Model);
    order_time = models.DateTimeField(null=True)
    status = models.ForeignKey('Status')

    class Meta:
        ordering = ('status__importance', 'order_time')

创建您的状态模型并根据需要设置重要性字段,在您的示例中,将状态1和2的重要性设置为相等(如5),并将状态3的重要性设置为“更重”(如10)。这将按重要性,然后按时间对顺序进行分组,因此具有相同重要性的状态将被分组在一起。

如何为选择创建一个模型

def Status(models.Model):
    # You could put in an 'id' or 'code' field to match up to your current status codes properly
    value = models.CharField(max_length=20)
    importance = models.IntegerField()
然后将您的模型更改为:

class Order(models.Model);
    order_time = models.DateTimeField(null=True)
    status = models.ForeignKey('Status')

    class Meta:
        ordering = ('status__importance', 'order_time')

创建您的状态模型并根据需要设置重要性字段,在您的示例中,将状态1和2的重要性设置为相等(如5),并将状态3的重要性设置为“更重”(如10)。这将按重要性和时间对顺序进行分组,因此具有相同重要性的状态将被分组在一起。

谢谢,但我不确定这是否有帮助。据我所知,订购选项将导致我的订单先按状态排序,然后按订购时间排序。我需要的是按订单时间对订单进行排序,并且只将那些订单附加到列表底部,这些订单的状态为
order\u
completed
谢谢,但我不确定这是否对我有帮助。据我所知,订购选项将导致我的订单先按状态排序,然后按订购时间排序。我需要的是按订单时间对订单进行排序,并且只将那些状态为
order\u
of
completed