class ApproxCountQuerySet(QuerySet): """Counting all rows is very expensive on large postgresql tables. This is a replacement for QuerySet that returns an approximation if count() is called with no additional constraints. In all other cases it should behave exactly as QuerySet. """ def count(self): # Code from django/db/models/query.py if self._result_cache is not None and not self._iter: return len(self._result_cache) query = self.query if (not query.where and query.high_mark is None and query.low_mark == 0 and not query.select and not query.group_by and not query.having and not query.distinct): cursor = connections[self.db].cursor() cursor.execute("SELECT reltuples FROM pg_class WHERE relname = %s", (self.model._meta.db_table,)) return cursor.fetchall()[0][0] else: return self.query.get_count(using=self.db) class ArchivedPostAdmin(admin.ModelAdmin): show_full_result_count = False # only works with django 1.8 def queryset(self, request): qs = super(ArchivedPostAdmin, self).queryset(request) return qs._clone(klass=ApproxCountQuerySet)
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question