我想检查给定查询集中是否选择了给定字段。假设存在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
)
答案 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")
希望对您有所帮助。 干杯