使用特定顺序的ID列表从Django数据库中获取记录

时间:2016-05-08 20:01:24

标签: python mysql django

我正在尝试创建一个Django查询集,该查询集以特定顺序返回与ID列表匹配的记录。

我的ID列表是:

[34,12,4,89,3,67,11]

如果我运行以下查询:

queryset = Item.objects.filter(pk__in=[34,12,4,89,3,67,11])

查询以ID顺序返回记录:

3,4,11,12,34,67,89

有没有办法让查询以与列表相同的顺序返回记录?

如果没有办法将查询结果重新排序为所需的顺序?

1 个答案:

答案 0 :(得分:1)

注意:添加此作为答案,因为OP询问了原始问题的评论中的方法。在评论中显示片段并不允许使用受防护的代码块。

在原始问题的评论中,我提到了一个替代解决方案,将您的订单号存储在模型字段中,以便有序查询更简单。

一个用例就是如果你有一个对象队列,其中每个项目都是一个电影,用户正在决定观看它们的顺序。您可能希望让Django管理员或用户重新订购项目(从而使其成为一个字段)。为了一个简单的例子,我们假设只有一个用户,因此我们将在模型中构建排序,而不是通过Item和User模型建立自定义表。

模特:

class Item(models.Model):
    # ...
    my_order = models.PositiveIntegerField(unique=True)

在创建时或以后设置属性:

Item.objects.create(id=34, my_order=1)
Item.objects.create(id=12, my_order=2)
Item.objects.create(id=4, my_order=3)
# ...

当然,您可以创建它们并按照您希望的任何顺序设置my_order,结果仍然是相同的。

按所需顺序检索对象:

queryset = Item.objects.order_by('my_order')