在django请求中写入id = -1意味着什么?

时间:2018-09-09 09:02:48

标签: python django

我正在阅读某人的代码,并且已编写

get_object_or_404(Order, id=-1)

有人可以解释id=-1的目的吗?

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响应。