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