我想查询我的django数据库一次,然后返回一个queryset(分配了名称“codes”),我可以迭代这个queryset来获得每个示例的“internal\u 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
])
3条答案
按热度按时间lsmd5eda1#
如果要强制对queryset进行求值,可以执行以下操作:
codes = list(models.RecordType.objects.all())
k0pti3hp2#
你写的大概就是这样,但你不应该打电话
get()
一直在上面。每次这样做都是在进行一个单独的db查询。django从数据库中懒洋洋地获取结果,当您指示需要结果时。例如
现在,如果您想确保查询只发生在正确的位置,您应该使用测试工具(如本问题中所述)来测试您的代码。这是确保代码在db查询方面做了它应该做的事情的唯一方法。
lpwwtiir3#
使用\uuu-in运算符
filter
所有的RecordType
与industry_code
出现在Category
枚举:使用。仅在情况下使用
RecordType
有很多你不需要的字段。但我不确定是否每次在queryset上使用get时都在查询数据库
对。你可以锁链
.filter()
,.exclude()
,以及其他返回查询集而不运行查询集的方法;与.get()
queryset会立即(每次)求值,并返回一个示例。