[0] 在 Django 查询中是什么意思?

what does [0] mean in django query?

比如我要过滤查询,为什么要在最后写[0]?

      order_item = OrderItem.objects.filter(
               item=product,
               user=self.request.user,
               ordered=False
            )[0]

当我没有在末尾添加 [0] 时,它会引发类似这样的错误:

Field 'id' expected a number but got <QuerySet [<OrderItem: OrderItem object (5)>]>.

或者在另一种情况下,当我没有在末尾添加 [0] 时,会引发此错误:

'QuerySet' object has no attribute 'items'

将查询设置为可迭代的,以便您可以通过索引(如列表)访问其元素。在这段代码中:

order_item = OrderItem.objects.filter(
           item=product,
           user=self.request.user,
           ordered=False
        )

您将获得一个查询集,最后 [0] 将选择其中的第一个元素。像普通的可迭代对象。

您可以将 [0] 替换为 .first(),例如:

order_item = OrderItem.objects.filter(
               item=product,
               user=self.request.user,
               ordered=False
            ).first()

它将 return 来自查询集的第一个元素(或者 None 如果查询集为空)。

如果您确定只有一个对象会匹配查询,您可以使用 get():

order_item = OrderItem.objects.get(
           item=product,
           user=self.request.user,
           ordered=False
        )