为什么在空的 Django 查询集 return 上使用 .latest()...什么都没有?
Why does using .latest() on an empty Django queryset return...nothing?
下面是一些构建查询集并在每一步打印输出(用于调试)的代码:
qs = self.get_queryset(True)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs) # []
qs = qs.completed()
print(qs) # []
qs = qs.latest('time_completed')
print(qs) # <-- What happened? Why is this blank?
print(qs is None) # False <-- huh??
print("nothing") if not qs else print("something") # <-- blank?!?! how?!
print(type(qs)) #
最后一个操作qs.latest('time_completed')
打印空白,类型为空白,忽略if语句。这是怎么回事?
结果不是空查询集的示例工作正常(注意所有项目都是单个用户,只是巧合):
qs = self.get_queryset(True)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.completed()
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.latest('time_completed')
print(qs) # obj_1
print("nothing") if not qs else print("something") # something
print(type(qs)) # <class 'my_app.models.MyModel'>
Like get(), earliest() and latest() raise DoesNotExist if there is no object with the given parameters.
只要 qs
是空查询集,qs.latest('field')
就应该引发 Model.DoesNotExist
异常。
In [2]: Entity.objects.none().latest('creation_date')
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call last)
检查您的 view/method.
中的异常是否被吞噬
如果您希望它 return None 而不是抛出错误,您可以使用 order_by()
和 last()
.
qs.order_by('time_completed').last()
如果查询集为空,这将 return None。
下面是一些构建查询集并在每一步打印输出(用于调试)的代码:
qs = self.get_queryset(True)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs) # []
qs = qs.completed()
print(qs) # []
qs = qs.latest('time_completed')
print(qs) # <-- What happened? Why is this blank?
print(qs is None) # False <-- huh??
print("nothing") if not qs else print("something") # <-- blank?!?! how?!
print(type(qs)) #
最后一个操作qs.latest('time_completed')
打印空白,类型为空白,忽略if语句。这是怎么回事?
结果不是空查询集的示例工作正常(注意所有项目都是单个用户,只是巧合):
qs = self.get_queryset(True)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.get_user(user)
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.completed()
print(qs) # [<MyModel: obj_1>, <MyModel: obj_2>, <MyModel: obj_2>, <MyModel: obj_3>]
qs = qs.latest('time_completed')
print(qs) # obj_1
print("nothing") if not qs else print("something") # something
print(type(qs)) # <class 'my_app.models.MyModel'>
只要Like get(), earliest() and latest() raise DoesNotExist if there is no object with the given parameters.
qs
是空查询集,qs.latest('field')
就应该引发 Model.DoesNotExist
异常。
In [2]: Entity.objects.none().latest('creation_date')
---------------------------------------------------------------------------
DoesNotExist Traceback (most recent call last)
检查您的 view/method.
中的异常是否被吞噬如果您希望它 return None 而不是抛出错误,您可以使用 order_by()
和 last()
.
qs.order_by('time_completed').last()
如果查询集为空,这将 return None。