|
1 | 1 | from django.contrib import admin
|
| 2 | +from django.contrib.admin.views.main import ChangeList |
2 | 3 | from django.contrib.auth import get_user_model
|
3 | 4 | from django.db.models import Count, Q
|
4 | 5 |
|
@@ -105,8 +106,28 @@ def queryset(self, request, queryset):
|
105 | 106 | return queryset.all()
|
106 | 107 |
|
107 | 108 |
|
| 109 | +class PrefetchingChangeList(ChangeList): |
| 110 | + """A custom changelist to prefetch related fields.""" |
| 111 | + def get_queryset(self, request): |
| 112 | + qs = super(PrefetchingChangeList, self).get_queryset(request) |
| 113 | + |
| 114 | + if subscription_status in self.list_display: |
| 115 | + qs = qs.prefetch_related('subscription_set') |
| 116 | + if 'customer' in self.list_display: |
| 117 | + qs = qs.prefetch_related('customer') |
| 118 | + if 'user' in self.list_display: |
| 119 | + qs = qs.prefetch_related('user') |
| 120 | + return qs |
| 121 | + |
| 122 | + |
| 123 | +class ModelAdmin(admin.ModelAdmin): |
| 124 | + def get_changelist(self, request, **kwargs): |
| 125 | + return PrefetchingChangeList |
| 126 | + |
| 127 | + |
108 | 128 | admin.site.register(
|
109 | 129 | Charge,
|
| 130 | + admin_class=ModelAdmin, |
110 | 131 | list_display=[
|
111 | 132 | "stripe_id",
|
112 | 133 | "customer",
|
@@ -202,6 +223,7 @@ def subscription_status(obj):
|
202 | 223 |
|
203 | 224 | admin.site.register(
|
204 | 225 | Customer,
|
| 226 | + admin_class=ModelAdmin, |
205 | 227 | raw_id_fields=["user"],
|
206 | 228 | list_display=[
|
207 | 229 | "stripe_id",
|
|
0 commit comments