Django - объединение QuerySet для различных подклассов абстрактной модели - PullRequest
0 голосов
/ 12 апреля 2019

Например, у меня есть абстрактная модель X и модели A, B и C, унаследованные от X (с некоторыми переопределенными полями).

Я хочу создать QuerySet, который включает в себя все A s, B s и C s. Поскольку X является абстрактным и не имеет собственного QuerySet (потому что это не таблица для обобщенного X), я пытаюсь сделать следующее:

# annotating with a `type` integer denoting the actual type
# some_field is present in A and B, but absent in C, so we add a placeholder to allow `union`
(A.objects.all().annotate(type=models.Value(1, models.IntegerField()))
            .union(B.objects.all().annotate(type=models.Value(2, models.IntegerField())))
            .union(C.objects.all().annotate(some_field=models.Value(None, models.IntegerField()),
                                            type=models.Value(3, models.IntegerField()))
                   )
            )

Однако это не работает, поскольку порядок столбцов в сформированном запросе SQL различен для каждой части объединения (из-за переопределенных полей). Есть ли способ явно указать порядок?

P.S. Здесь я не могу использовать values() или values_list(), поскольку мне нужно хранить объекты модели (не словари / кортежи) в QuerySet.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...