如何在 DRF 中对列表进行排序?
How to sort list in DRF?
我有两个具有一对一关系用户和博客的模型。在列出用户时,我希望拥有博客的用户位于顶部。如何对用户进行排序,以便拥有博客的用户位于列表的首位,并按用户 ID 进行次要排序?
我的模特:
class User(BaseModel):
name = models.CharField(max_length=100)
class Blog(BaseModel):
user = models.OneToOneField(User, related_name='blog', null=True)
title = models.CharField(max_length=100)
我的看法:
class UserAPIView(ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
您可以使用 Exists
子查询:
from django.db.models import Exists, OuterRef
class UserAPIView(ListAPIView):
queryset = Movie.objects.order_by(
<strong>Exists(Blog.objects.filter(user_id=OuterRef('pk'))).desc()</strong>
)
serializer_class = UserSerializer
因此,我们确定每个 User
是否存在 User
对应的 Blog
,并且我们通过使用 false
对 true
进行排序.desc(…)
method [Django-doc].
我有两个具有一对一关系用户和博客的模型。在列出用户时,我希望拥有博客的用户位于顶部。如何对用户进行排序,以便拥有博客的用户位于列表的首位,并按用户 ID 进行次要排序? 我的模特:
class User(BaseModel):
name = models.CharField(max_length=100)
class Blog(BaseModel):
user = models.OneToOneField(User, related_name='blog', null=True)
title = models.CharField(max_length=100)
我的看法:
class UserAPIView(ListAPIView):
queryset = User.objects.all()
serializer_class = UserSerializer
您可以使用 Exists
子查询:
from django.db.models import Exists, OuterRef
class UserAPIView(ListAPIView):
queryset = Movie.objects.order_by(
<strong>Exists(Blog.objects.filter(user_id=OuterRef('pk'))).desc()</strong>
)
serializer_class = UserSerializer
因此,我们确定每个 User
是否存在 User
对应的 Blog
,并且我们通过使用 false
对 true
进行排序.desc(…)
method [Django-doc].