Как получить список столбцов в Django Queryset? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть код, который создает несколько сложных наборов запросов из разных таблиц, используя множество аннотаций и т. Д. *

Затем код присоединяется к этим наборам запросов, используя объединение.

Каждый из нихнаборы запросов сами по себе, кажется, в порядке. Вызов print(len(qset)) работает для каждого из них.

Но после combined_qset = qset1.union(qset2) я получаю следующую ошибку:

django.db.utils.ProgrammingError: each UNION query must have the
same number of columns
LINE 1: ..., '') AS "owner" FROM "t1") UNION (SELECT "field_x...
                                                     ^

Когда я смотрю на код, я считаю количество полейв вызовах .only(...) и .values(...), подсчете количества аннотаций и т. д. кажется, что все эти наборы запросов имеют одинаковое количество столбцов.

В сообщении об ошибке показана лишь небольшая часть SQLгенерируется (см. выше), так что это не очень полезно.

Есть ли простой способ получить список столбцов набора запросов, чтобы я мог найти несоответствие и исправить его?

1 Ответ

0 голосов
/ 01 октября 2019

Я понял!

print('qset1:', len(qset1), qset1[0].__dict__.keys())
print('qset2:', len(qset2), qset2[0].__dict__.keys())
print('qset3:', len(qset2), qset3[0].__dict__.keys())
...

qset[0] дает первую строку набора запросов qset (Это работает, только если в наборе запросов есть хотя бы одна строка)

.__dict__ преобразует эту строку в словарь - словарь с ключами, являющимися именами столбцов, а значения являются элементами строк

.keys() дает список ключей словаря, таким образом, столбцы

Thisпечатает список столбцов для всех наборов запросов.

...