Enhance admin site.

Regroup auth models.
This commit is contained in:
Adarnof 2017-06-30 17:57:29 -04:00
parent a235254e48
commit 84b1ddc5d9
5 changed files with 81 additions and 51 deletions

View File

@ -2,9 +2,8 @@ from __future__ import unicode_literals
from django.contrib import admin
from django.contrib.auth.admin import UserAdmin as BaseUserAdmin
from django.contrib.auth.models import User
from django.contrib.auth.models import User, Permission
from django.utils.text import slugify
from django import forms
from authentication.models import State, get_guest_state, CharacterOwnership, UserProfile
from alliance_auth.hooks import get_hooks
from services.hooks import ServicesHook
@ -63,79 +62,96 @@ class UserAdmin(BaseUserAdmin):
action.short_description)
return actions
# Re-register UserAdmin
try:
admin.site.unregister(User)
finally:
admin.site.register(User, UserAdmin)
class StateForm(forms.ModelForm):
def _is_none_state(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return instance == get_guest_state()
def __init__(self, *args, **kwargs):
super(StateForm, self).__init__(*args, **kwargs)
if self._is_none_state():
self.fields['name'].widget.attrs['readonly'] = True
def clean_name(self):
if self._is_none_state():
return self.instance.name
return self.cleaned_data['name']
list_filter = BaseUserAdmin.list_filter + ('profile__state',)
@admin.register(State)
class StateAdmin(admin.ModelAdmin):
form = StateForm
fieldsets = (
(None, {
'fields': ('name', 'permissions', 'priority'),
}),
('Membership', {
'classes': ('collapse',),
'fields': ('public', 'member_characters', 'member_corporations', 'member_alliances'),
})
)
filter_horizontal = ['member_characters', 'member_corporations', 'member_alliances', 'permissions']
list_display = ('name', 'priority', 'user_count')
def has_delete_permission(self, request, obj=None):
if obj == get_guest_state():
return False
return super(StateAdmin, self).has_delete_permission(request, obj=obj)
def get_fieldsets(self, request, obj=None):
if obj == get_guest_state():
return (
(None, {
'fields': ('permissions', 'priority'),
}),
)
return super(StateAdmin, self).get_fieldsets(request, obj=obj)
admin.site.register(CharacterOwnership)
class UserProfileAdminForm(forms.ModelForm):
def __init__(self, *args, **kwargs):
super(UserProfileAdminForm, self).__init__(*args, **kwargs)
self.fields['state'].widget.attrs['disabled'] = True
instance = getattr(self, 'instance', None)
if instance and instance.pk:
self.fields['state'].queryset = State.objects.filter(pk=instance.state.pk)
else:
self.fields['state'].queryset = State.objects.filter(pk=get_guest_state().pk)
def clean_state(self):
instance = getattr(self, 'instance', None)
if instance and instance.pk:
return UserProfile.objects.get(pk=instance.pk).state
else:
return get_guest_state()
@staticmethod
def user_count(obj):
return obj.userprofile_set.all().count()
@admin.register(UserProfile)
class UserProfileAdmin(admin.ModelAdmin):
form = UserProfileAdminForm
readonly_fields = ('user', 'state')
search_fields = ('user__username', 'main_character__character_name')
list_filter = ('state',)
list_display = ('user', 'main_character')
actions = None
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
@admin.register(CharacterOwnership)
class CharacterOwnershipAdmin(admin.ModelAdmin):
list_display = ('user', 'character')
search_fields = ('user__username', 'character__character_name', 'character__corporation_name', 'character__alliance_name')
readonly_fields = ('owner_hash', 'character')
class PermissionAdmin(admin.ModelAdmin):
actions = None
readonly_fields = [field.name for field in Permission._meta.fields]
list_display = ('admin_name', 'name', 'codename', 'content_type')
list_filter = ('content_type__app_label',)
@staticmethod
def admin_name(obj):
return str(obj)
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
# Hack to allow registration of django.contrib.auth models in our authentication app
class ProxyUser(User):
class Meta:
proxy = True
verbose_name = User._meta.verbose_name
verbose_name_plural = User._meta.verbose_name_plural
class ProxyPermission(Permission):
class Meta:
proxy = True
verbose_name = Permission._meta.verbose_name
verbose_name_plural = Permission._meta.verbose_name_plural
try:
admin.site.unregister(User)
finally:
admin.site.register(ProxyUser, UserAdmin)
admin.site.register(ProxyPermission, PermissionAdmin)

View File

@ -191,6 +191,7 @@ class Migration(migrations.Migration):
],
options={
'default_permissions': ('change', 'delete'),
'ordering': ['user', 'character__character_name'],
},
),
migrations.CreateModel(

View File

@ -83,6 +83,7 @@ class UserProfile(models.Model):
class CharacterOwnership(models.Model):
class Meta:
default_permissions = ('change', 'delete')
ordering = ['user', 'character__character_name']
character = models.OneToOneField(EveCharacter, on_delete=models.CASCADE, related_name='character_ownership')
owner_hash = models.CharField(max_length=28, unique=True)

View File

@ -123,7 +123,6 @@ def fatlink_statistics_corp_view(request, corpid, year=None, month=None):
corp_members = CharacterOwnership.objects.filter(character__corporation_id=corpid).values('user_id').distinct()
for member in corp_members:
print(member)
try:
fat_stats[member['user_id']] = MemberStat(User.objects.get(pk=member['user_id']), start_of_month, start_of_next_month)
except ObjectDoesNotExist:

View File

@ -1,6 +1,6 @@
from __future__ import unicode_literals
from django.contrib import admin
from django.contrib.auth.models import Group
from groupmanagement.models import GroupRequest
from groupmanagement.models import AuthGroup
@ -11,5 +11,18 @@ class AuthGroupAdmin(admin.ModelAdmin):
"""
filter_horizontal = ('group_leaders',)
class ProxyGroup(Group):
class Meta:
proxy = True
verbose_name = Group._meta.verbose_name
verbose_name_plural = Group._meta.verbose_name_plural
try:
admin.site.unregister(Group)
finally:
admin.site.register(ProxyGroup)
admin.site.register(GroupRequest)
admin.site.register(AuthGroup, AuthGroupAdmin)