Как отсортировать список в 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].