-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathadmin.py
118 lines (98 loc) · 3.77 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
111
112
113
114
115
116
117
118
from django.contrib import admin, messages
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.utils.translation import ugettext_lazy as _
from .conf import settings
from .forms import UserChangeForm, UserCreationForm
from .models import User
from .utils import send_activation_email
try:
from django.contrib.admin.utils import model_ngettext
except ImportError: # pragma: no cover
from django.contrib.admin.util import model_ngettext
class UserModelFilter(admin.SimpleListFilter):
"""
An admin list filter for the UserAdmin which enables
filtering by its child models.
"""
title = _('user type')
parameter_name = 'user_type'
def lookups(self, request, model_admin):
user_types = set([user.user_type for user in model_admin.model.objects.all()])
return [(user_type.id, user_type.name) for user_type in user_types]
def queryset(self, request, queryset):
try:
value = int(self.value())
except TypeError:
value = None
if value:
return queryset.filter(user_type_id__exact=value)
else:
return queryset
class UserAdmin(BaseUserAdmin):
fieldsets = (
(None, {
'fields': ('email', 'password', 'name', 'sex', 'birthday', 'job_number',
'zhengzhi_mianmao', 'zhengzhi_time', 'job', 'job_time',
'job_2', 'id_number', 'xue_li', 'school', 'graduate_time',
'job_join_time', 'team_belong', 'phone',)
}),
(_('Permissions'), {
'fields': ('is_active', 'is_staff', 'is_superuser',
'groups', 'user_permissions')
}),
(_('Important dates'), {
'fields': ('last_login', 'date_joined')
}),
)
add_fieldsets = (
(None, {
'classes': ('wide',),
'fields': ('email', 'password1', 'password2')
}),
)
form = UserChangeForm
add_form = UserCreationForm
list_display = ('email', 'is_active')
list_filter = (UserModelFilter, 'is_staff', 'is_superuser', 'is_active',)
search_fields = ('email',)
ordering = ('email',)
actions = ('activate_users', 'send_activation_email', )
readonly_fields = ('last_login', 'date_joined', )
def get_queryset(self, request):
# optimize queryset for list display.
qs = self.model.base_objects.get_queryset()
ordering = self.get_ordering(request)
if ordering:
qs = qs.order_by(*ordering)
return qs
def activate_users(self, request, queryset):
"""
Activates the selected users, if they are not already
activated.
"""
n = 0
for user in queryset:
if not user.is_active:
user.activate()
n += 1
self.message_user(
request,
_('Successfully activated %(count)d %(items)s.') %
{'count': n, 'items': model_ngettext(self.opts, n)}, messages.SUCCESS)
activate_users.short_description = _('Activate selected %(verbose_name_plural)s')
def send_activation_email(self, request, queryset):
"""
Send activation emails for the selected users, if they are not already
activated.
"""
n = 0
for user in queryset:
if not user.is_active and settings.USERS_VERIFY_EMAIL:
send_activation_email(user=user, request=request)
n += 1
self.message_user(
request, _('Activation emails sent to %(count)d %(items)s.') %
{'count': n, 'items': model_ngettext(self.opts, n)}, messages.SUCCESS)
send_activation_email.short_description = \
_('Send activation emails to selected %(verbose_name_plural)s')
admin.site.register(User, UserAdmin)