根据QuerySet.latest()
方法源代码,情况并非如此 -latest()
不会 raise MultipleObjectsReturned
,因为它将结果限制为 1 个元素:
def latest(self, field_name=None):
"""
Returns the latest object, according to the model's 'get_latest_by'
option or optional given field_name.
"""
latest_by = field_name or self.model._meta.get_latest_by
assert bool(latest_by), "latest() requires either a field_name parameter or 'get_latest_by' in the model"
assert self.query.can_filter(), \
"Cannot change a query once a slice has been taken."
obj = self._clone()
obj.query.set_limits(high=1) # <-- see here
obj.query.clear_ordering()
obj.query.add_ordering('-%s' % latest_by)
return obj.get()
get()
但是,正如在其源代码中可见的那样,MultipleObjectsReturned
仅当结果数不同于1
(当它实际返回此结果时)和不同于0
(当它 raise 时)时才会引发DoesNotExist
。
因此,尽管latest()
返回 的结果get()
,但get()
可以在不超过 1 个元素的东西上工作,您无需担心这种极端情况。希望它足够清楚。
我相信在这种情况下(当两个或多个记录具有相同的最新日期时)Django 依赖于从数据库返回的内容。