我想创建一个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
有没有办法让查询返回的记录与列表中的顺序相同?
如果不能,是否有一种方法可以将查询结果重新排序为所需的顺序?
我想创建一个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
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')