如何检查查询集是否为空?

Zor*_*gan 3 python django pagination

分页代码:

try:
    page = paginator.page(page_number)
    print(page.object_list)
Run Code Online (Sandbox Code Playgroud)

所以以下输出是print(page.object_list)我分页的结果:

<QuerySet [<Comment: I can't believe it's happeinig>, <Comment: Just trying to fill up the comments>, <Comment: Another one!>, <Comment: Evenmore noe>, <Comment: Something>, <Comment: Lol>, <Comment: Are comments showing up?>, <Comment: Great for the economy.>, <Comment: honestly>, <Comment: Even though the the onlyEven though the only one to udnertstnaf!>]>
<QuerySet [<Comment: Yeah it's crazy how fast aswell. It's very awesome how it's doing atm. >]>
<QuerySet []>
<QuerySet [<Comment: Sure>, <Comment: No worries>]>
<QuerySet []>
<QuerySet []>
<QuerySet [<Comment: attempt 2!>]>
<QuerySet [<Comment: Attempt 3!>]>
<QuerySet []>
<QuerySet [<Comment: 12>]>
<QuerySet []>
<QuerySet [<Comment: Somewhere?>]>
<QuerySet []>
<QuerySet [<Comment: lol>]>
<QuerySet []>
<QuerySet [<Comment: 12>]>
<QuerySet []>
Run Code Online (Sandbox Code Playgroud)

如您所见,我有空的查询集,这些导致我的代码出错。因此,我想遍历这些查询集并找出空的。我试图添加这个 for 循环:

for i in page.object_list:
    if len(i) < 0:
Run Code Online (Sandbox Code Playgroud)

但我收到一个错误:

TypeError at /news/11/
object of type 'Comment' has no len()
Run Code Online (Sandbox Code Playgroud)

任何帮助表示赞赏。

如果查询集为空,则尝试删除它:

try:
    page = paginator.page(page_number)
    if page.object_list:
        pass
    else:
        page.delete()
Run Code Online (Sandbox Code Playgroud)

错误:

AttributeError at /news/11/
'CustomPage' object has no attribute 'delete'  
Run Code Online (Sandbox Code Playgroud)

Mos*_*oye 5

您可以使用if子句直接测试 QuerySet 。这将导致 QuerySet 被评估。空查询集(或空列表)是假的

page = paginator.page(page_number)
if page.object_list:
    ...
Run Code Online (Sandbox Code Playgroud)

如果您想在 QuerySet 上进行迭代,则无需测试是否为空。只需使用for子句:

for obj in page.object_list: # empty QuerySet gets zero iterations
   ...
Run Code Online (Sandbox Code Playgroud)