-
Notifications
You must be signed in to change notification settings - Fork 101
/
admin.py
111 lines (87 loc) · 3.71 KB
/
admin.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
from django.http import HttpResponse, Http404, HttpResponseRedirect
from django.core.exceptions import ObjectDoesNotExist
from django.contrib import admin
from django.db import models
from softdelete.models import *
from softdelete.admin.forms import *
import logging
class SoftDeleteObjectInline(admin.TabularInline):
class Meta:
exclude = ('deleted_at',)
def __init__(self, parent, site, *args, **kwargs):
super(SoftDeleteObjectInline, self).__init__(parent, site, *args, **kwargs)
if parent.deleted:
self.extra = 0
self.max_num = 0
def get_queryset(self, request):
qs = self.model._default_manager.all_with_deleted()
ordering = self.get_ordering(request) or ()
if ordering:
qs = qs.order_by(*ordering)
return qs
queryset = get_queryset
class SoftDeleteObjectAdmin(admin.ModelAdmin):
form = SoftDeleteObjectAdminForm
actions = ['delete_selected', 'soft_undelete']
def delete_selected(self, request, queryset):
queryset.delete()
delete_selected.short_description = 'Soft delete selected objects'
def soft_undelete(self, request, queryset):
queryset.undelete()
soft_undelete.short_description = 'Undelete selected objects'
def response_change(self, request, obj, *args, **kwargs):
if 'undelete' in request.POST:
return HttpResponseRedirect('../')
return super(SoftDeleteObjectAdmin, self).response_change(request, obj, *args, **kwargs)
def get_queryset(self, request):
try:
qs = self.model._default_manager.all_with_deleted()
except Exception as ex:
qs = self.model._default_manager.all()
ordering = self.get_ordering(request) or ()
if ordering:
qs = qs.order_by(*ordering)
return qs
queryset = get_queryset
class SoftDeleteRecordInline(admin.TabularInline):
model = SoftDeleteRecord
max_num = 0
exclude = ('content_type', 'object_id',)
readonly_fields = ('content',)
class SoftDeleteRecordAdmin(admin.ModelAdmin):
model = SoftDeleteRecord
form = SoftDeleteRecordAdminForm
actions = ['soft_undelete']
def soft_undelete(self, request, queryset):
[x.undelete() for x in queryset.all()]
soft_undelete.short_description = 'Undelete selected objects'
def response_change(self, request, obj, *args, **kwargs):
if 'undelete' in request.POST:
obj.undelete()
return HttpResponseRedirect('../../')
return super(SoftDeleteRecordAdmin, self).response_change(request, obj,
*args, **kwargs)
def has_add_permission(self, *args, **kwargs):
return False
def has_delete_permission(self, *args, **kwargs):
return False
class ChangeSetAdmin(admin.ModelAdmin):
model = ChangeSet
form = ChangeSetAdminForm
inlines = (SoftDeleteRecordInline,)
actions = ['soft_undelete']
def soft_undelete(self, request, queryset):
[x.undelete() for x in queryset.all()]
soft_undelete.short_description = 'Undelete selected objects'
def response_change(self, request, obj, *args, **kwargs):
if 'undelete' in request.POST:
obj.undelete()
return HttpResponseRedirect('../../')
return super(ChangeSetAdmin, self).response_change(request, obj,
*args, **kwargs)
def has_add_permission(self, *args, **kwargs):
return False
def has_delete_permission(self, *args, **kwargs):
return False
admin.site.register(SoftDeleteRecord, SoftDeleteRecordAdmin)
admin.site.register(ChangeSet, ChangeSetAdmin)