如何检查查询集中的列是否存在(Django ORM)

时间:2018-12-26 13:52:44

标签: django django-orm

我想检查给定查询集中是否选择了给定字段。假设存在Queryset.has()方法,则该方法应在没有AssertionError的情况下运行:

qs = Author.objects.all()
assert not qs.has('articles_count')
qs = qs.annotate(articles_count=Count('articles'))
assert qs.has('articles_count')
qs = qs.values('pk')
assert not qs.has('articles_count')

(假设模型Author默认没有字段articles_count

2 个答案:

答案 0 :(得分:0)

您可以尝试使用Python的hasattr方法:

In [3]: hasattr(qs, "articles_count")
Out[3]: False

或者如果您要检查每个模型实例的此属性:

all([hasattr(x, "articles_count") for x in qs])

答案 1 :(得分:0)

我有一个类似的问题,并使用了try-逻辑除外:

try:
    queryset.columnname
except:
    print("Nope, columnname is not in queryset")

希望对您有所帮助。 干杯