我使用 q.latest() 从查询集中检索最新的对象,并get_latest_by = 'created'在其模型的Meta类中进行设置。
例如:
class A(models.Model):
created = models.DateTimeField(auto_now=True)
class Meta:
get_latest_by = 'created'
Run Code Online (Sandbox Code Playgroud)
但由于 djangoDateTimeField仅支持秒,没有微秒支持,我认为我的系统无法正确从查询集中检索最新对象。
也许这是因为表中有些记录具有相同的created值,尽管它们不是在完全相同的时间(微秒内)创建的。
因此,我尝试在类中使用pkforget_latest_by属性Meta而不是created,但由于我对 和 如何latest()协同get_latest_by工作缺乏深入的了解,我不确定放置get_latest_by = 'pk'.
直接放就可以吗get_latest_by = 'pk'?latest()django 的背面到底做了什么?
latest基本上只是一个快捷方式,order_by用于get获取按字段排序的查询集中的最后一项get_latest_by。
pk排序没问题,但它依赖于关于您的应用程序和数据库后端如何工作的假设(例如,您导入从高数字 pk 9999 开始的数据...它会“填充”缺失的 1、2、3、100、2000键(如果稍后插入新数据?)
未来 Django 将支持微秒https://code.djangoproject.com/ticket/19716
目前最好的办法是将两者结合起来,即order_by('created', 'pk')
不幸的get_latest_by是,latest不允许您指定复合排序(并且它会删除默认pk排序),因此您可能更愿意手动执行以下操作:
.order_by('-created', '-pk').get()
Run Code Online (Sandbox Code Playgroud)
(请注意,get获取查询集中的第一-项,因此您需要使用前缀反转顺序以获取最新的)
| 归档时间: |
|
| 查看次数: |
4368 次 |
| 最近记录: |