django - Django defer() 和 only() 查询集不起作用?
问题描述
如果我误解了查询集中 defer() 或 only() 的正确用法,请指导我。
这是我试图从 Donor 模型中仅获取选定字段数据以加快处理速度的代码,因为它有 2000 个条目,并且当我使用 all() 时,它需要时间来获取数据。
def donor(request):
# donors = Donors.objects.all()
donors = Donors.objects.only('donorid','donor_type','title','donor_name','address',
'mobile_no','jamatkhana')
# donors = Donors.objects.defer('donorid','donor_type','title','donor_name','address',
'mobile_no','jamatkhana')
return render(request,"hod_template/add_donor_template.html",{"donors":donors})
使用“only()”或“defer()”后,结果仍然与“all()”相同,没有一个选定的字段既不是延迟的也不是唯一的。即使加载时间比 all() 还要多。
请告诉我如何从供体模型中仅获取这些选定的字段数据。我还告诉你我也尝试过“Values()”方法,但问题是“jamatkhana”字段是 ForeignKey,我也想要它的数据。但是使用“Values()”方法它只获取值而不是外键内部数据。希望我解释得当?
解决方案
但问题是该
jamatkhana
领域是ForeignKey
,我也想要它的数据。
可能获取引用的相关对象是ForeignKey
瓶颈。您可以使用.select_related(…)
[Django-doc]JOIN
在数据库端创建一个,从而jamatkhana
使用相同的查询获取相关字段的数据。如果没有.select_related(…)
,它将进行额外的查询以 Donor
获取相关数据,因此这很容易导致对数据库的大量额外查询。
因此,您可以使用以下方式渲染它:
donors = Donors.objects.select_related('jamatkhana')
然而,正如@AbdulAzizBarkat指出的那样,通常分页用于减少从网络服务器到客户端的数据量,并且通常通过对查询集进行切片,您还可以减少从数据库到 Django 的带宽(有时是查询的数量) /Python 层。
推荐阅读
- python - 在 xml.etree.ElementTree 中多次使用单引号
- python - 使用 Python 请求库抓取数据时的奇怪响应
- reactjs - 如果设置取决于公司 ID,在哪里以及如何设置 API 中的项目列表?(反应,redux,redux-thunk)
- flutter - 颤振:如何通过单击“+”图标将商品添加到购物车中?
- sql - SELECT WHERE 多条记录不存在
- google-sheets - 无法弄清楚为什么这个 summif 语句不起作用
- php - 数组行正在覆盖另一行
- kubernetes - 识别 ISTIO 服务网格中的调用服务
- r - 从 PDF 中提取文本 - Rstudio
- azure-devops - 无法检查资源组状态:通过服务主体/连接使用 CD 管道部署 ARM 模板时出现 403