如何在 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,并且我们通过使用 falsetrue 进行排序.desc(…) method [Django-doc].