如何获取Django Queryset中的列列表?

时间:2019-10-01 14:25:12

标签: django django-queryset

我有一个代码,可以使用很多批注等从不同的表创建多个复杂的查询集...

然后代码使用并集将那些查询集连接起来。

每个查询集本身似乎都不错。呼叫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 :(得分:0)

我明白了!

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()给出了字典键的列表,因此是列

这将打印所有查询集的列列表。