如何在django中正确使用元属性get_latest_?
我使用q.latest()从queryset中检索最近的对象,在它的模型的如何在django中正确使用元属性get_latest_?,django,Django,我使用q.latest()从queryset中检索最近的对象,在它的模型的Meta类中设置get\u latest\u by='created' 例如: class A(models.Model): created = models.DateTimeField(auto_now=True) class Meta: get_latest_by = 'created' 但是由于django的DateTimeField只支持秒,没有微秒级的支持,我认为我的系统没有正
Meta
类中设置get\u latest\u by='created'
例如:
class A(models.Model):
created = models.DateTimeField(auto_now=True)
class Meta:
get_latest_by = 'created'
但是由于django的DateTimeField
只支持秒,没有微秒级的支持,我认为我的系统没有正确地从queryset检索最新的对象
这可能是因为表中有一些记录具有相同的创建值
,尽管它们不是在完全相同的时间(微秒内)创建的
因此,我尝试在Meta
类中使用pk
作为get\u latest\u by
属性,而不是created
,但是由于我对latest()
和get\u latest\u by
如何协同工作缺乏深入的理解,我不确定将get\u latest\u by='pk>放在一起是否正确
把get\u latest\u by='pk'
放进去可以吗?而latest()
在django的背面到底做了什么?latest
基本上只是order\u by
然后是get
的快捷方式,以获取查询set ordered byget\u latest\u by
字段中的最后一项
pk
排序是可以的,但它依赖于对应用程序和db后端如何工作的假设(例如,从高pk 9999开始导入数据…如果以后插入新数据,它是否会“填充”缺少的1、2、3、100、2000键?)
将来Django将支持微秒
目前最好将两者结合起来,即,order\u by('created','pk')
不幸的是,get_latest_by
和latest
不允许您指定复合排序(它会删除默认的pk
排序),因此您可能更愿意手动执行以下操作:
.order_by('-created', '-pk').get()
(请注意,get
获取查询集中的第一项,因此您需要使用-
前缀反转订单以获取最新的)可能的重复项