在 Django 中打乱查询集

Shuffle queryset in Django

我希望在 django 中只混洗部分查询集。

qs = [obj1(order=0), obj2(order=1), obj3(order=999), obj4(order=999), .....]

查询集按 'order' 字段排序,可以是 0 - 999 之间的任何值。

最后的结果应该是所有不是999的对象都会从0开始排序,

只有顺序为 999 的对象才会被打乱。

可以吗?

鉴于查询集不是太大而不能作为列表排序,您可以执行以下操作:

shuffled = sorted(qs, key=lambda item: item.order if item.order != 999 else 999 + random.random())