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 from django.contrib.auth.admin import UserAdmin from django.utils.translation import ugettext, ugettext_lazy as _ from orchestra.admin import ExtendedModelAdmin, ChangePasswordAdminMixin from orchestra.admin.utils import wrap_admin_view from orchestra.apps.accounts.admin import SelectAccountAdminMixin from orchestra.forms import UserCreationForm, UserChangeForm from .models import SystemUser class SystemUserAdmin(ChangePasswordAdminMixin, SelectAccountAdminMixin, ExtendedModelAdmin): list_display = ('username', 'account_link', 'shell', 'home', 'is_active', 'is_main') list_filter = ('is_active', 'is_main', 'shell') fieldsets = ( (None, { 'fields': ('username', 'password', 'account_link', 'is_active') }), (_("System"), { 'fields': ('home', 'shell', 'groups'), }), ) add_fieldsets = ( (None, { 'fields': ('username', 'password1', 'password2', 'account') }), (_("System"), { 'fields': ('home', 'shell', 'groups'), }), ) search_fields = ['username'] readonly_fields = ('account_link',) change_readonly_fields = ('username',) filter_horizontal = ('groups',) filter_by_account_fields = ('groups',) add_form = UserCreationForm form = UserChangeForm ordering = ('-id',) def get_form(self, request, obj=None, **kwargs): """ exclude self reference on groups """ form = super(SystemUserAdmin, self).get_form(request, obj=obj, **kwargs) 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 admin.site.register(SystemUser, SystemUserAdmin)