eug*_*ene 13 django django-queryset
我看到clone()在django代码中被广泛使用
queryset.query.clone()
queryset.clone()
Run Code Online (Sandbox Code Playgroud)
它是什么,我应该模仿我的queryset或manager方法中的行为?
Don*_*kby 17
正如Kevin在他的回答中指出的那样,该clone()方法不是Django API的文档部分.但是,该all()方法已完整记录,并且可以完成您想要的操作clone().
所有()
返回当前QuerySet(或QuerySet子类)的副本.这在您可能希望传入模型管理器或QuerySet并对结果进行进一步过滤的情况下非常有用.在任一对象上调用all()之后,你肯定会有一个QuerySet来使用.
在评估QuerySet时,它通常会缓存其结果.如果自评估QuerySet以来数据库中的数据可能已更改,则可以通过在先前评估的QuerySet上调用all()来获取同一查询的更新结果.
Kev*_*nry 11
主要原因有两个clone():
它允许链接.将查询集链接在一起(例如,多个filter()调用)时,每次可以修改时都需要查询集的新副本.
它允许您避免过时的缓存结果.由于查询集在评估结果时会缓存其结果,因此如果要确保再次访问数据库,则需要克隆查询集.
如果您知道自己在做什么,可以使用它,但请注意,它不是公共API.在这个有趣的Django开发人员线程中,开发人员谈论是否clone()应该公开.他们决定反对,部分原因是:
公共
.clone()方法的最大问题是私有._clone()不仅仅是克隆.在某些情况下,克隆也会更改QuerySet的行为方式.
| 归档时间: |
|
| 查看次数: |
8658 次 |
| 最近记录: |