Django ORM: Case When не работает, когда на выходе получается подзапрос, создающий список идентификаторов?

Сегодня я потратил невероятное количество времени на то, чего совершенно не понимаю. Позвольте мне объяснить:

У меня есть код, похожий на этот:

puzzle_sequence__puzzles = <a subquery>
puzzle_sequence__puzzles_3d = <another subquery>
MyModel.objects.add_only_3d_puzzle_sequence().exclude(puzzle__in=Case(
                                When(Q(only_3d_puzzle_sequence=True), 
                                    then=Subquery(puzzle_sequence__puzzles_3d)),
                                default=Subquery(puzzle_sequence__puzzles)
                                ))

, что приводит к ошибке

sqlite3.OperationalError: near "CASE": syntax error
django.db.utils.OperationalError: near "CASE": syntax error

или

django.db.utils.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'CASE WHEN CASE WHEN (`games_play`.`puzzle_sequence_id` IS NOT NULL AND CASE W...' at line 1")

в зависимости от того, на каком сервере я работаю - sqlite3 или MariaDB

Я уже некоторое время пытаюсь разобраться с этим вопросом, и, похоже, что проблема возникла именно в операторе Case When, поскольку оба следующих оператора работают нормально:

MyModel.objects.add_only_3d_puzzle_sequence().exclude(puzzle__in=Subquery(puzzle_sequence__puzzles_3d))
MyModel.objects.add_only_3d_puzzle_sequence().exclude(puzzle__in=Subquery(puzzle_sequence__puzzles))

Однако я совершенно не понимаю, почему мой оператор Case When не работает

Существует ли конкретный вопрос, должен ли output_field оператор

Case When представлять собой список объектов или список идентификаторов объектов?

PS: как вы можете видеть, я не использую Postgres, поэтому я думаю, что я не могу заставить output_field=ArrayAgg. Заранее спасибо

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