でクエリセット・カウント()メソッドをオーバーライドする方法を、私はそうのようなDjangoのadminクラス内count()
メソッドをオーバーライドしたいと思います:、時間とコストのかかる正確なデータベース・カウントクエリを避けるために、Djangoの管理者リスト
from django.contrib import admin
from django.db import connection
class CountProxy:
def __call__(self):
# how to access the queryset `query` here?
query = ...
try:
if not query.where:
cursor = connection.cursor()
cursor.execute("SELECT reltuples FROM pg_class WHERE relname = %s", [query.model._meta.db_table])
n = int(cursor.fetchone()[0])
if n >= 1000: return n # exact count for small tables
return object_list.count()
except:
# exception for lists
return len(object_list)
return estimated_count
class MyAdmin(admin.ModelAdmin):
def get_queryset(self, request):
qs = super(MyAdmin, self).get_queryset(request)
qs.count = CountProxy()
return qs
しかし私はCountProxy
クラスの元のクエリーセットにアクセスする方法を知らない。何か案が?私はget_changelist
を通して全体をchangelist
で上書きできることを知っています。しかし、これにはDjangoのリポジトリからコードを複製することがたくさんあります。
魅力のように動作します、ありがとう! –