• Django Remaining elements truncated 오버라이딩 하기

    2021. 5. 24.

    by. Jacob Lee

    728x90

     


     

    Remaining elements truncated 오버라이딩

    쉘이나 도커 로그를 보다 보면 쿼리셋의 쿼리들이 쭉 나오다가 'remaining elements truncated' 문구가 이어지면서 쿼리들이 잘리는 상황이 많이 일어난다. 

     

    가끔씩 컴퓨터가 못 미더워서(?) 쿼리들을 일일이 확인해보고 싶을 때가 있는데, 오늘도 그런 상황이 생겨 구글링을 해 간단한 답을 얻어냈다.

     

    다음과 같은 코드로 특정 기간 동안 링크를 생성한 유저를 뽑아내는 셀러리 큐 로직이 있다.

    active_user_count = Link.objects.filter(
        created__range(start_date, end_date)
    ).values('user_id').distinct().count()

     

    잘 작동하는 것 같지만, 테스트해보기 위해 쉘에서 한 번 카운트를 실행해 보았다.

    >>> active_user_count
    50

     

    숫자로는 잘 나오는 것 같지만, 출력되는 실제 유저 아이디를 보고 싶어 다음과 같이 작성하였다.

    (distinct()는 order_by() 없이 사용할 때 작동이 안 되는 경우가 많으므로 같이 사용해주자).

    >>> active_user = Link.objects.filter(
    ...     created_range = (start_date, end_date)
    ... ).values('user_id').order_by('user_id').distinct()
    
    >>> active_user
    <LinkQuerySet [{'user_id': 49}, {'user_id': 247}, {'user_id': 406}, {'user_id': 456}, 
    {'user_id': 494}, {'user_id': 518}, {'user_id': 570}, {'user_id': 579}, {'user_id': 623},
    {'user_id': 677}, {'user_id': 707}, {'user_id': 708}, {'user_id': 719}, {'user_id': 745}, 
    {'user_id': 803}, {'user_id': 837}, {'user_id': 893}, {'user_id': 904}, {'user_id': 910}, {'user_id': 913}, 
    '...(remaining elements truncated)...']>

     

    하지만 위와 같이 remaining elements truncated와 같은 메시지가 출력되는데, 즉 나머지 요소들의 끝이 잘렸다는 말이다.

    이러면 원래 의도에서 벗어나기 때문에 구글링을 한 후 다음과 같은 간단한 답을 얻었다.

    >>> list(active_user)
    [{'user_id': 49},
     {'user_id': 247},
     {'user_id': 406},
     {'user_id': 456},
     {'user_id': 494},
     {'user_id': 518},
     {'user_id': 570},
     {'user_id': 579},
     {'user_id': 623},
     {'user_id': 677},
     .....이후 생략
    ]

     

    위와 같이 리스트를 사용하면 remaining elements truncated 출력 없이 쿼리셋안의 모든 쿼리들을 확인할 수 있다.

    728x90

    댓글