|
3 | 3 | from django.conf import settings
|
4 | 4 | from django.contrib import admin
|
5 | 5 | from django.contrib.admin import helpers
|
6 |
| -from django.contrib.admin.utils import unquote |
| 6 | +from django.contrib.admin.utils import quote, unquote |
7 | 7 | from django.contrib.auth import get_permission_codename, get_user_model
|
8 | 8 | from django.core.exceptions import PermissionDenied
|
9 | 9 | from django.shortcuts import get_object_or_404, render
|
@@ -285,35 +285,38 @@ def enforce_history_permissions(self):
|
285 | 285 | )
|
286 | 286 |
|
287 | 287 |
|
288 |
| -class SimpleHistoryShowDeletedFilter(admin.SimpleListFilter): |
289 |
| - title = "Entries" |
290 |
| - parameter_name = "entries" |
| 288 | +class SimpleHistoryWithDeletedAdmin(SimpleHistoryAdmin): |
| 289 | + class SimpleHistoryShowDeletedFilter(admin.SimpleListFilter): |
| 290 | + title = "Entries" |
| 291 | + parameter_name = "entries" |
291 | 292 |
|
292 |
| - def lookups(self, request, model_admin): |
293 |
| - return (("deleted_only", "Only Deleted"),) |
| 293 | + def lookups(self, request, model_admin): |
| 294 | + return (("deleted_only", "Only Deleted"),) |
294 | 295 |
|
295 |
| - def queryset(self, request, queryset): |
296 |
| - if self.value(): |
297 |
| - return queryset.model.history.filter(history_type="-").distinct() |
298 |
| - return queryset |
| 296 | + def queryset(self, request, queryset): |
| 297 | + if self.value(): |
| 298 | + return queryset.model.history.filter(history_type="-").distinct() |
| 299 | + return queryset |
299 | 300 |
|
300 |
| - |
301 |
| -class YourModelAdmin(SimpleHistoryAdmin): |
302 | 301 | def get_changelist(self, request, **kwargs):
|
303 | 302 | def url_from_result_maker(history=False):
|
304 | 303 | def custom_url_for_result(self, result):
|
305 | 304 | pk = getattr(result, self.pk_attname)
|
306 |
| - from django.urls import reverse |
307 |
| - from django.contrib.admin.utils import quote |
308 | 305 | route_type = 'history' if history else 'change'
|
309 | 306 | route = f'{self.opts.app_label}_{self.opts.model_name}_{route_type}'
|
310 | 307 | return reverse(f'admin:{route}',
|
311 | 308 | args=(quote(pk),),
|
312 | 309 | current_app=self.model_admin.admin_site.name)
|
313 | 310 | return custom_url_for_result
|
| 311 | + |
314 | 312 | changelist = super().get_changelist(request, **kwargs)
|
315 | 313 | if request.GET.get('entries', None) == 'deleted_only':
|
316 | 314 | changelist.url_for_result = url_from_result_maker(history=True)
|
317 | 315 | else:
|
318 | 316 | changelist.url_for_result = url_from_result_maker(history=False)
|
319 | 317 | return changelist
|
| 318 | + |
| 319 | + def get_list_filter(self, request): |
| 320 | + return [self.SimpleHistoryShowDeletedFilter] + [ |
| 321 | + f for f in super().get_list_filter(request) |
| 322 | + ] |
0 commit comments