我正在阅读某人的代码,并且已编写
get_object_or_404(Order, id=-1)
有人可以解释id=-1
的目的吗?
答案 0 :(得分:2)
Well get_object_or_404
[Django-doc]将模型或查询集作为输入,并试图用其余的 positional 和 named 参数进行过滤。然后它的目的是获取该对象,并在该对象不存在的情况下引发404。
因此,我们的目标是使用Order
获得一个id=-1
对象。因此,在“幕后”执行的查询是:
Order.objects.get(id=-1) # SELECT order.* FROM order WHERE id=-1
但是,在大多数数据库中,id
(严格地)是肯定的(如果这些是自动分配的)。因此除非用Order
显式保存id=-1
对象,否则将始终引发404异常。
但是,有时候存储一个带有负ID的对象可以很容易地检索和更新“特殊”对象(尽管我个人认为这不是一个好习惯,因为这实际上与 singleton 有关和 global state 反模式)。因此,您可以查看(例如在数据库中或在代码中)是否存在带有负id
的对象。如果未创建这些对象,那么此代码将始终 导致404响应。