gpt4 book ai didi

django - 在 Django 中,当有多个可能结果时,最新的 ('date' ) 返回什么?

转载 作者:行者123 更新时间:2023-12-02 08:31:18 24 4
gpt4 key购买 nike

我正处于了解 Django 的最初阶段,并且已经开始致力于一个项目来帮助我学习它。在编写一些模型时,我遇到了一种情况,我想使用latest(),但可能有多个对象具有相同的“最新”日期。

在 Django 文档中 latest ,它说

Like get(), latest() raises DoesNotExist if there is no object with the given parameters.

但是,如果有多个对象具有相同的“最新”日期,latest() 会做什么?我怀疑它会引发 MultipleObjectsReturned就像 get() 会做的那样,但由于文档中没有说明这一点,所以我在这里询问。我实际上希望它返回最新创建的对象,即具有最大主键的对象。如果它不这样做,那么正确的 get() 语句是什么,它将获得按日期最新的值,如果有多个,则按主键获得最大的值?

最佳答案

根据QuerySet.latest() method source code ,情况并非如此 - latest() 不会引发 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() 然而,as visible in its source code ,仅当结果数量不同于 1(当它实际返回此结果时)并且不同于 0(当它引发不存在)。

因此,尽管 latest() 返回 get() 的结果,但 get() 适用于不超过 1 个元素的内容并且您无需担心这种极端情况。希望它足够清楚。

我相信在这种情况下(当两个或多个记录具有相同的最新日期时)Django 依赖于从数据库返回的内容。

关于django - 在 Django 中,当有多个可能结果时,最新的 ('date' ) 返回什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13848755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com