django-orchestra/orchestra/apps/systemusers/admin.py

85 lines
3.0 KiB
Python
Raw Normal View History

import textwrap
from django import forms
from django.conf.urls import patterns, url
from django.core.urlresolvers import reverse
from django.contrib import admin
from django.contrib.admin.util import unquote
2014-10-06 14:57:02 +00:00
from django.contrib.auth.admin import UserAdmin
from django.utils.translation import ugettext, ugettext_lazy as _
2014-10-23 15:38:46 +00:00
from django.utils.safestring import mark_safe
2014-10-06 14:57:02 +00:00
from orchestra.admin import ExtendedModelAdmin, ChangePasswordAdminMixin
from orchestra.admin.utils import wrap_admin_view
2014-09-30 16:39:47 +00:00
from orchestra.apps.accounts.admin import SelectAccountAdminMixin
from orchestra.apps.accounts.filters import IsActiveListFilter
2014-10-06 14:57:02 +00:00
from orchestra.forms import UserCreationForm, UserChangeForm
from . import settings
from .actions import grant_permission, delete_selected
2014-10-23 15:38:46 +00:00
from .filters import IsMainListFilter
from .forms import SystemUserCreationForm, SystemUserChangeForm
from .models import SystemUser
2014-10-06 14:57:02 +00:00
class SystemUserAdmin(ChangePasswordAdminMixin, SelectAccountAdminMixin, ExtendedModelAdmin):
2014-11-14 15:51:18 +00:00
list_display = (
'username', 'account_link', 'shell', 'display_home', 'display_active', 'display_main'
)
list_filter = (IsActiveListFilter, 'shell', IsMainListFilter)
fieldsets = (
(None, {
2014-09-30 10:20:11 +00:00
'fields': ('username', 'password', 'account_link', 'is_active')
}),
(_("System"), {
'fields': ('shell', ('home', 'directory'), 'groups'),
}),
)
add_fieldsets = (
(None, {
2014-10-23 15:38:46 +00:00
'fields': ('account_link', 'username', 'password1', 'password2')
}),
(_("System"), {
'fields': ('shell', ('home', 'directory'), 'groups'),
}),
)
search_fields = ('username', 'account__username')
2014-09-30 16:39:47 +00:00
readonly_fields = ('account_link',)
change_readonly_fields = ('username',)
filter_horizontal = ('groups',)
filter_by_account_fields = ('groups',)
add_form = SystemUserCreationForm
form = SystemUserChangeForm
ordering = ('-id',)
actions = (delete_selected, grant_permission,)
change_view_actions = actions
2014-10-23 15:38:46 +00:00
def display_main(self, user):
return user.is_main
display_main.short_description = _("Main")
display_main.boolean = True
def display_home(self, user):
return user.get_home()
display_home.short_description = _("Home")
display_home.admin_order_field = 'home'
def get_form(self, request, obj=None, **kwargs):
form = super(SystemUserAdmin, self).get_form(request, obj, **kwargs)
form.account = self.account
if obj:
# Has to be done here and not in the form because of strange phenomenon
# derived from monkeypatching formfield.widget.render on AccountAdminMinxin,
# don't ask.
formfield = form.base_fields['groups']
formfield.queryset = formfield.queryset.exclude(id=obj.id)
return form
2014-10-23 15:38:46 +00:00
def has_delete_permission(self, request, obj=None):
if obj and obj.is_main:
return False
return super(SystemUserAdmin, self).has_delete_permission(request, obj)
admin.site.register(SystemUser, SystemUserAdmin)