Как отсортировать список в DRF?

У меня есть две модели с односторонним отношением user и blog. При выводе списка пользователей я хочу, чтобы пользователи с блогом были на первом месте. Как упорядочить пользователей так, чтобы пользователи с блогом были первыми в списке, а вторых упорядочить по 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(
        Exists(Blog.objects.filter(user_id=OuterRef('pk'))).desc()
    )
    serializer_class = UserSerializer

Таким образом, мы определяем для каждого User, существует ли Blog для этого User, и сортируем true перед false, используя метод .desc(…) [Django-doc].

Вернуться на верх