我想查询我的Django数据库一次,并返回一个Queryset(指定名称为“codes”),我可以迭代它来获得每个实例的“internal_code”属性,而无需进一步调用数据库。这是我的代码,但我不确定每次在Queryset上使用“get”时是否都在查询数据库,以及如何避免这种情况:
codes = models.RecordType.objects.all()
permanent = sorted([
(
codes.get(
industry_code=category.value
).internal_code,
self.labels.get(category, category.name)
)
for category in enums.Category
])
使用__in运算符
filter
在Category
枚举中存在industry_code
的所有RecordType
:在案例
RecordType
中使用.only有许多您不需要的字段对。您可以链接
.filter()
、.exclude()
和其他返回查询集而不运行查询集的方法;使用.get()
立即(并且每次)计算queryset,返回一个实例如果要强制对QuerySet进行评估,可以执行以下操作:
codes = list(models.RecordType.objects.all())
你写的东西大致上就是这样做的,但是你不应该总是在上面调用
get()
。每次这样做时,您都在进行单独的数据库查询当您表示需要结果时,Django会从数据库中惰性地获取结果。例如
现在,如果希望确保查询只发生在正确的位置,那么应该使用this question中描述的测试工具来测试代码。这是确保代码按照db查询的方式运行的唯一方法
相关问题 更多 >
编程相关推荐