Набор запросов Django: логический атрибут order_by ForeignKey - PullRequest
0 голосов
/ 05 июня 2019

Я пытаюсь упорядочить набор запросов так, чтобы:

  • первыми элементами набора запросов были те, которые имеют логический атрибут ForeignKey (first), установленный в True, и среди них,они упорядочены по дате создания
  • . Следующие элементы - это элементы с атрибутом ForeignKey first, установленным в False, и опять же среди них они упорядочены по дате создания

.пример моделей:

class A(models.Model):
    first = models.BooleanField(blank=False, default=False)

class B(models.Model):
    a = models.ForeignKey(A)
    created = models.DateTimeField(auto_now_add=True)

Набор запросов выглядит следующим образом:

queryset = B.objects.all().order_by("-a__first", "-created")

Однако этот сниппер не выполняет свою работу.

Решение, которое я 'Я думаю о том, чтобы использовать два разных вызова базы данных (один фильтр для a__first = True и другой фильтр для a__first = False), а затем суммировать результаты наборов запросов.Но я хотел бы понять, есть ли лучший и более чистый способ решения этой проблемы.

1 Ответ

0 голосов
/ 05 июня 2019

Попробуйте следующий условный запрос, он может работать

from django.db.models import Case, When

B.objects.annotate(
    first_true=Case(
        When(a__first=True, then=('created')),
        default=None
    ),
    first_false=Case(
        When(a__first=False, then=('created')),
        default=None
    )
).order_by(
    '-first_true',
    '-first_false',
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...