2017-11-08 15 views
0

매김 코드 :queryset이 ​​비어 있는지 확인하는 방법?

try: 
    page = paginator.page(page_number) 
    print(page.object_list) 

그래서 다음과 같은 출력이 내 페이지 매김을위한 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 []> 

당신은 내가 빈 검색어 세트를 가지고 있고,이 내 코드에서 오류를 일으키는 볼 수 있듯이. 따라서 나는 이러한 쿼리 세트를 반복하고 빈 샘플을 찾아 내고 싶습니다. 나는 루프에 대해이 작업을 추가하려고 :

for i in page.object_list: 
    if len(i) < 0: 

하지만 오류 얻을 : 어떤 도움을 주시면 감사

TypeError at /news/11/ 
object of type 'Comment' has no len() 

합니다.

은 비어있는 경우는 A의 검색어를 삭제하려고 :

try: 
    page = paginator.page(page_number) 
    if page.object_list: 
     pass 
    else: 
     page.delete() 

오류 :

AttributeError at /news/11/ 
'CustomPage' object has no attribute 'delete' 
+1

페이지 매거진을 만들기 전에 쿼리 세트를 필터링해야합니다. – Sayse

답변

3

을 당신이 직접 경우 절을 사용하여 검색어 세트를 테스트 할 수 있습니다. 그러면 QuerySet이 평가됩니다. 빈 검색어 세트 (또는 빈 목록) falsy 다음과 같습니다

page = paginator.page(page_number) 
if page.object_list: 
    ... 

당신이 검색어 세트에 반복하려면, 공허함을 테스트 할 필요가 없습니다. 그냥 에 대한 절 사용

for obj in page.object_list: # empty QuerySet gets zero iterations 
    ... 
+0

감사합니다. 'else' 절의 페이지를 삭제할 방법이 있습니까? 당신이 내 편집을 보았을 때 어떻게 시도했는지 확실하지 않았습니다. – Zorgan

+0

비어있는 경우 아무 것도 삭제하지 않아도됩니다. 파이썬은 가비지 컬렉션을 수행합니다. –

+0

빈 페이지가 분명히 있습니다. 따라서 페이지 매김 패키지에 오류가 발생합니다. 이 질문과 관련된 다른 질문을 할 수 있습니까? https://stackoverflow.com/questions/46847282/element-disappears-when-i-add-an-include-tag-inside-my -for-loop'has_next()'가'False' 인 이유는 그 사이에 빈 케리 세트가 있기 때문입니다. 곧이 코멘트를 삭제하겠습니다. – Zorgan

1

사용할 수를 exists (강조 광산) 비록

page.object_list.exists() 

Returns True if the QuerySet contains any results, and False if not. This tries to perform the query in the simplest and fastest way possible, but it does execute nearly the same query as a normal QuerySet query.

exists() is useful for searches relating to both object membership in a QuerySet and to the existence of any objects in a QuerySet, particularly in the context of a large QuerySet.

, 매기기

를 작성하기 전에 검색어 세트를 필터링하는 것이 훨씬 더 좋을 것이다
0

또 다른 방법은 다음과 같습니다.

if page.object_list.count() == 0: 
    #Empty Result 
else: 
    #Something