Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
按用户进行Ordenate django查询_Django_Django Rest Framework_Django Queryset - Fatal编程技术网

按用户进行Ordenate django查询

按用户进行Ordenate django查询,django,django-rest-framework,django-queryset,Django,Django Rest Framework,Django Queryset,我试图检索一些用户创建并在我的API中显示的对象,但我需要该用户对这些对象进行排序。如果使用order_by('created_by'),查询集将按用户id(不一定是我想要的id,而是降序)排序,第一个结果必须是我的用户创建的Opportunity,然后是其他结果 我以为这可以解决,但q失去了与union的联系: def get_queryset(self): user = self.request.user q_all = Opportunity.objects.all().e

我试图检索一些用户创建并在我的API中显示的对象,但我需要该用户对这些对象进行排序。如果使用order_by('created_by'),查询集将按用户id(不一定是我想要的id,而是降序)排序,第一个结果必须是我的用户创建的
Opportunity
,然后是其他结果

我以为这可以解决,但
q
失去了与union的联系:

def get_queryset(self):
    user = self.request.user
    q_all = Opportunity.objects.all().exclude(created_by=user.id)
    q_user = Opportunity.objects.filter(created_by=user.id).exclude(archived=True)
    q = q_user | q_all
    return q
您可以使用with键方法对
QuerySet
进行排序

解决方案

def sort_by_auth_user(self, item):
    if item.created_by == self.request.user:
        return -1
    else:
        return 1

def get_queryset(self):
    opp_qs = Opportunity.objects.all()
    sorted_opp_qs = sorted(opp_qs, key=self.sort_by_auth_user)
    return sorted_opp_qs
sorted
方法接受一个列表和一个可选参数
key
,您可以在其中传递一个方法,以便根据自己的自定义需要进行排序

我使用该自定义方法来检查由创建的
项是否为经过身份验证的用户,为此我返回了
-1
,该值可能小于未经身份验证的用户创建的其他项的值。

您可以使用键方法对
查询集
进行排序

解决方案

def sort_by_auth_user(self, item):
    if item.created_by == self.request.user:
        return -1
    else:
        return 1

def get_queryset(self):
    opp_qs = Opportunity.objects.all()
    sorted_opp_qs = sorted(opp_qs, key=self.sort_by_auth_user)
    return sorted_opp_qs
sorted
方法接受一个列表和一个可选参数
key
,您可以在其中传递一个方法,以便根据自己的自定义需要进行排序


我使用该自定义方法检查由
创建的
项是否为已验证用户,为此我返回了
-1
,该值可能小于未由已验证用户创建的其他项的值。

是否要按用户名订购?可以是名称或id,我只想比queryset中的其他人先显示用户的opportunity。您想按用户名订购吗?可以是姓名或id,我只想比queryset中的其他人先显示用户的opportunity。谢谢,这正是我需要的谢谢,这正是我需要的