Posts /

Django Admin 성능 최적화

05 Jun 2018

개요

원인

# 심지어 두번 조회중!
SELECT COUNT(*) AS "__count" FROM "table_name"

해결

  1. 관리자 페이지 상단에 전체건수를 적어주기 위해 1번 조회가 됨
# Admin 클래스 내부에 속성을 추가함
class SomeAdmin(admin.ModelAdmin):
    show_full_result_count = False
  1. 그래도 1번이 남았는데 이것은 Django Paginator 에 의해서 발생함
    • Count 근사치를 캐시해조는 방법으로 해결 가능
    • 페이지 넘버가 커지는 경우 꼬일 가능성 있음
    • 초기 로드시 Count 조회 후 이후 캐시값 사용
    • 아래의 캐시된 Paginator Class 를 Admin class 에서 사용
      class SomeAdmin(admin.ModelAdmin):
       paginator = CachingPaginator
      

추가

# Admin class 에서 get_queryset Method Override
class SomeAdmin(admin.ModelAdmin):
    # ...

    def get_queryset(self, request):
        qs = super(SomeAdmin, self).get_queryset(request)
        return qs.select_related('some_foreign_field')

    # ...

Twitter Facebook Google+