按用户进行Ordenate django查询
我试图检索一些用户创建并在我的API中显示的对象,但我需要该用户对这些对象进行排序。如果使用order_by('created_by'),查询集将按用户id(不一定是我想要的id,而是降序)排序,第一个结果必须是我的用户创建的按用户进行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
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。谢谢,这正是我需要的谢谢,这正是我需要的