/
admin.py
126 lines (94 loc) · 3.75 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
119
120
121
122
123
124
125
126
__copyright__ = "Copyright (c) 2018 Helium Edu"
__license__ = "MIT"
__version__ = "1.5.1"
from django import forms
from django.contrib.admin import ModelAdmin
from django.contrib.auth import admin, password_validation
from django.contrib.auth import get_user_model
from django.contrib.auth.forms import UserChangeForm, UserCreationForm
from django.core import exceptions
from rest_framework.authtoken.models import Token
from helium.auth.models import UserProfile
from helium.auth.models import UserSettings
from helium.common.admin import admin_site, BaseModelAdmin
class AdminUserCreationForm(UserCreationForm):
def clean_password2(self):
password1 = self.cleaned_data.get("password1")
password2 = self.cleaned_data.get("password2")
if password1 != password2:
raise forms.ValidationError("You must enter matching passwords.")
try:
password_validation.validate_password(password=password1, user=get_user_model())
except exceptions.ValidationError as e:
raise forms.ValidationError(list(e.messages))
return password1
def save(self, commit=True):
super().save(commit)
self.instance.is_active = True
self.instance.save()
return self.instance
class UserAdmin(admin.UserAdmin, BaseModelAdmin):
form = UserChangeForm
add_form = AdminUserCreationForm
list_display = ('email', 'username', 'created_at', 'last_login', 'is_active')
list_filter = (
'is_active', 'profile__phone_verified', 'settings__default_view', 'settings__receive_emails_from_admin',)
search_fields = ('email', 'username')
ordering = ('-last_login',)
add_fieldsets = (
(None, {
'fields': ('username', 'email', 'password1', 'password2',),
}),
)
fieldsets = None
filter_horizontal = ()
def get_readonly_fields(self, request, obj=None):
if obj:
return self.readonly_fields + ('created_at', 'last_login',)
return self.readonly_fields
class UserSettingsAdmin(BaseModelAdmin):
list_display = ['time_zone', 'default_view', 'receive_emails_from_admin', 'get_user']
list_filter = ['default_view', 'week_starts_on', 'receive_emails_from_admin']
search_fields = ('user__email', 'user__username')
ordering = ('user__username',)
readonly_fields = ('user',)
def get_user(self, obj):
if obj.user:
return obj.user.get_username()
else:
return ''
def has_add_permission(self, request):
return False
get_user.short_description = 'User'
get_user.admin_order_field = 'user__username'
class UserProfileAdmin(BaseModelAdmin):
list_display = ['phone', 'phone_verified', 'get_user']
search_fields = ('user__email', 'user__username')
ordering = ('user__username',)
readonly_fields = ('user',)
def has_add_permission(self, request):
return False
def get_user(self, obj):
if obj.user:
return obj.user.get_username()
else:
return ''
get_user.short_description = 'User'
get_user.admin_order_field = 'user__username'
class TokenAdmin(ModelAdmin):
list_display = ['key', 'created', 'get_user']
search_fields = ('key', 'user__email', 'user__username')
ordering = ('user__username',)
readonly_fields = ('user', 'created')
def get_user(self, obj):
if obj.user:
return obj.user.get_username()
else:
return ''
get_user.short_description = 'User'
get_user.admin_order_field = 'user__username'
# Register the models in the Admin
admin_site.register(get_user_model(), UserAdmin)
admin_site.register(UserSettings, UserSettingsAdmin)
admin_site.register(UserProfile, UserProfileAdmin)
admin_site.register(Token, TokenAdmin)