在Queryset中移动一个元素

Jul*_*uis 2 python django

我的django视图中有一个查询集.

我想改变其中一个项目的位置,以便它成为查询集的第一个元素.

有关如何做到这一点的任何想法?

编辑:

我有一个查询集:

   qs = UserProfile.objects.filter(myfilter=whatever)
Run Code Online (Sandbox Code Playgroud)

我知道在这个查询集中我有:

   specific_user.userprofile
Run Code Online (Sandbox Code Playgroud)

我想要做的是将user.userprofile放在我的查询集的第一个位置,因为我在模板的循环中使用了这个查询集:

    {% for i in qs %}
    <div> i.name </div>
Run Code Online (Sandbox Code Playgroud)

我想确保列表的第一个名称是specific_user的名称.

acj*_*jay 6

QuerySetDjango中的对象是数据库查询结果的抽象表示.一般来说,它表示在请求查询集中的特定对象时可能稍后执行的SQL,但在此之前,不会执行任何查询.所以你不能真正想到像列表这样的查询集,它可能是任意重新排序的.您可以请求使用其order_by方法对查询集中的对象进行排序,因此,如果您希望首先使用特定对象,则它必须在数据库方面具有一些可排序属性,以便对其进行排序.这可以是使用F表达式从其列计算的列或值.

但是,根据您的需求,您似乎可以在视图中列出您的查询集:

profiles = [specific_user.userprofile] + [profile for profile in UserProfile.objects.filter(myfilter=whatever).exclude(id=specific_user.userprofile.id)]
Run Code Online (Sandbox Code Playgroud)

将其添加到您的上下文并迭代它而不是模板中的原始查询集.