我需要通过两个不同的因素为Django管理员更改列表视图排序查询集:order_time和status。
排序后,应该通过减少order_time来排序生成的查询集,并且列表底部的所有项目都包含(item.status == 3
)。基本上我正试图将所有已完成的订单推到列表的底部,而不管他们是order_time
。
这就是模型的样子:
def Order(models.Model);
order_time = models.DateTimeField(null=True)
status = models.PositiveSmallIntegerField(choices=ORDER_STATUS, default=ORDER_RECEIVED)
我把查询集与itertools.chain结合起来,但是因为我正在为django更改列表视图执行此操作,所以我特别需要返回一个查询集。
我可以利用经理吗?或者他们是一种执行相应预订qs的自定义SQL的方法吗?
以下是订单查询集应如下所示的示例:
ORDER ORDER_TIME STATUS 3 12/3 2 8 12/5 2 1 12/6 1 7 12/2 3 10 11/12 3
答案 0 :(得分:4)
如何为选择制作模型。
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和1的重要性。 2等于(例如5)并将状态3的重要性设置为“更重”(例如10)。这将按重要性和时间对顺序进行分组,因此具有相同重要性的状态将组合在一起。
答案 1 :(得分:0)
模型include an ordering
option的元选项,它可以提供类似的内容:
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')