1

我有两个模型与 onetoone 关系用户和博客。在列出用户时,我希望用户的博客位于顶部。如何对用户进行排序,以使拥有博客的用户在列表的第一位,并按用户 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
4

1 回答 1

1

您可以使用以下Exists子查询:

from django.db.models import Exists, OuterRef

class UserAPIView(ListAPIView):
    queryset = Movie.objects.order_by(
        Exists(Blog.objects.filter(user_id=OuterRef('pk'))).desc()
    )
    serializer_class = UserSerializer

因此,我们确定每个User是否有一个Blogfor that ,然后我们通过使用方法 [Django-doc]User进行排序。truefalse.desc(…)

于 2021-11-07T15:39:30.477 回答