Add fields to discord and ts3 admin

This commit is contained in:
ErikKalkoken 2020-02-06 03:04:30 +01:00
parent b0448a4565
commit 458685026b
4 changed files with 143 additions and 82 deletions

View File

@ -189,12 +189,13 @@ class UserAdmin(BaseUserAdmin):
inlines = BaseUserAdmin.inlines + [UserProfileInline] inlines = BaseUserAdmin.inlines + [UserProfileInline]
ordering = ('username', )
list_select_related = True list_select_related = True
show_full_result_count = True show_full_result_count = True
list_display = ( list_display = (
'_profile_pic', '_profile_pic',
'_username', '_user',
'_state', '_state',
'_groups', '_groups',
'_main_organization', '_main_organization',
@ -234,7 +235,7 @@ class UserAdmin(BaseUserAdmin):
_profile_pic.short_description = '' _profile_pic.short_description = ''
def _username(self, obj): def _user(self, obj):
#/admin/<app>/<model>/<pk>/change/ #/admin/<app>/<model>/<pk>/change/
link = '/admin/authentication/{}/{}/change/'.format( link = '/admin/authentication/{}/{}/change/'.format(
type(obj).__name__.lower(), type(obj).__name__.lower(),
@ -244,11 +245,12 @@ class UserAdmin(BaseUserAdmin):
'<strong><a href="{}">{}</a></strong><br>{}', '<strong><a href="{}">{}</a></strong><br>{}',
link, link,
obj.username, obj.username,
obj.email obj.profile.main_character.character_name \
if obj.profile.main_character else ''
) )
_username.short_description = 'user' _user.short_description = 'user / main'
_username.admin_order_field = 'username' _user.admin_order_field = 'username'
def _main_organization(self, obj): def _main_organization(self, obj):
if obj.profile.main_character: if obj.profile.main_character:
@ -272,22 +274,12 @@ class UserAdmin(BaseUserAdmin):
def _characters(self, obj): def _characters(self, obj):
alts = [ return [
x.character.character_name x.character.character_name
for x in CharacterOwnership.objects\ for x in CharacterOwnership.objects\
.filter(user=obj)\ .filter(user=obj)\
.order_by('character__character_name') .order_by('character__character_name')
.exclude(character=obj.profile.main_character)
] ]
if obj.profile.main_character:
result = [
'<strong>{}</strong>'.format(
obj.profile.main_character.character_name
)
]
else:
result = []
return format_html(', '.join(result + alts))
_characters.short_description = 'characters' _characters.short_description = 'characters'
@ -372,7 +364,7 @@ class StateAdmin(admin.ModelAdmin):
class BaseOwnershipAdmin(admin.ModelAdmin): class BaseOwnershipAdmin(admin.ModelAdmin):
list_display = ('user', 'character') list_display = ('user', 'character')
search_fields = ('user__username', 'character__character_name', 'character__corporation_name', 'character__alliance_name') search_fields = ('user__user', 'character__character_name', 'character__corporation_name', 'character__alliance_name')
def get_readonly_fields(self, request, obj=None): def get_readonly_fields(self, request, obj=None):
if obj and obj.pk: if obj and obj.pk:

View File

@ -35,95 +35,67 @@ class AuthGroupInlineAdmin(admin.StackedInline):
return request.user.has_perm('auth.change_group') return request.user.has_perm('auth.change_group')
if _has_auto_groups:
class IsAutoGroupFilter(admin.SimpleListFilter):
title = 'auto group'
parameter_name = 'auto_group'
def lookups(self, request, model_admin):
return (
('Yes', 'Yes'),
('No', 'No'),
)
def queryset(self, request, queryset):
value = self.value()
if value == 'Yes':
return queryset.exclude(
managedalliancegroup__exact=None,
managedcorpgroup__exact=None
)
elif value == 'No':
return queryset.filter(managedalliancegroup__exact=None).filter(managedcorpgroup__exact=None)
else:
return queryset
class GroupAdmin(admin.ModelAdmin): class GroupAdmin(admin.ModelAdmin):
list_select_related = True list_select_related = True
ordering = ('name', )
list_display = ( list_display = (
'name', 'name',
'description', 'description',
'member_count', '_properties',
'has_leader', '_member_count',
'_attributes' 'has_leader'
) )
list_filter = ( list_filter = (
'authgroup__internal', 'authgroup__internal',
'authgroup__hidden', 'authgroup__hidden',
'authgroup__open', 'authgroup__open',
'authgroup__public', 'authgroup__public'
IsAutoGroupFilter
) )
filter_horizontal = ('permissions',) filter_horizontal = ('permissions',)
inlines = (AuthGroupInlineAdmin,) inlines = (AuthGroupInlineAdmin,)
def get_queryset(self, request): def get_queryset(self, request):
queryset = super().get_queryset(request) qs = super().get_queryset(request)
queryset = queryset.annotate( if _has_auto_groups:
_member_count=Count('user', distinct=True), qs = qs\
.filter(managedalliancegroup__exact=None)\
.filter(managedcorpgroup__exact=None)
qs = qs.annotate(
member_count=Count('user', distinct=True),
) )
return queryset return qs
def description(self, obj): def description(self, obj):
return obj.authgroup.description return obj.authgroup.description
def member_count(self, obj): def _member_count(self, obj):
return obj._member_count return obj.member_count
member_count.admin_order_field = '_member_count' _member_count.short_description = 'Members'
_member_count.admin_order_field = 'member_count'
def has_leader(self, obj): def has_leader(self, obj):
return obj.authgroup.group_leaders.exists() return obj.authgroup.group_leaders.exists()
has_leader.boolean = True has_leader.boolean = True
def _attributes(self, obj): def _properties(self, obj):
attributes = list() properties = list()
if (_has_auto_groups if obj.authgroup.hidden:
and ( properties.append('Hidden')
obj.managedalliancegroup_set.exists() if obj.authgroup.open:
or obj.managedcorpgroup_set.exists() properties.append('Open')
) if obj.authgroup.public:
): properties.append('Public')
attributes.append('Auto Group') if not properties:
elif obj.authgroup.internal: properties.append('Default')
attributes.append('Internal')
else:
if obj.authgroup.hidden:
attributes.append('Hidden')
if obj.authgroup.open:
attributes.append('Open')
if obj.authgroup.public:
attributes.append('Public')
if not attributes:
attributes.append('Default')
return ', '.join(attributes) return ', '.join(properties)
_properties.short_description = "properties"
_attributes.short_description = "Attributes"
class Group(BaseGroup): class Group(BaseGroup):
class Meta: class Meta:

View File

@ -3,7 +3,55 @@ from .models import DiscordUser
class DiscordUserAdmin(admin.ModelAdmin): class DiscordUserAdmin(admin.ModelAdmin):
list_display = ('user', 'uid') ordering = ('user__username', )
search_fields = ('user__username', 'uid') list_select_related = True
list_display = (
'user',
'uid',
'_corporation',
'_alliance',
'_date_joined'
)
search_fields = (
'user__username',
'uid'
)
list_filter = (
'user__profile__main_character__corporation_name',
'user__profile__main_character__alliance_name',
'user__date_joined',
)
def _corporation(self, obj):
if obj.user.profile.main_character:
return obj.user.profile.main_character.corporation_name
else:
return ''
_corporation.short_description = 'corporation (main)'
_corporation.admin_order_field \
= 'user__profile__main_character__corporation_name'
def _alliance(self, obj):
if (obj.user.profile.main_character
and obj.user.profile.main_character.alliance_id
):
return obj.user.profile.main_character.alliance_name
else:
return ''
_alliance.short_description = 'alliance (main)'
_alliance.admin_order_field \
= 'user__profile__main_character__alliance_name'
def _date_joined(self, obj):
return obj.user.date_joined
_date_joined.short_description = 'date joined'
_date_joined.admin_order_field = 'user__date_joined'
admin.site.register(DiscordUser, DiscordUserAdmin) admin.site.register(DiscordUser, DiscordUserAdmin)

View File

@ -3,8 +3,57 @@ from .models import AuthTS, Teamspeak3User, StateGroup
class Teamspeak3UserAdmin(admin.ModelAdmin): class Teamspeak3UserAdmin(admin.ModelAdmin):
list_display = ('user', 'uid', 'perm_key') ordering = ('user__username', )
search_fields = ('user__username', 'uid', 'perm_key') list_select_related = True
list_display = (
'user',
'uid',
'_corporation',
'_alliance',
'_date_joined',
'perm_key',
)
search_fields = (
'user__username',
'uid',
'perm_key'
)
list_filter = (
'user__profile__main_character__corporation_name',
'user__profile__main_character__alliance_name',
'user__date_joined',
)
def _corporation(self, obj):
if obj.user.profile.main_character:
return obj.user.profile.main_character.corporation_name
else:
return ''
_corporation.short_description = 'corporation (main)'
_corporation.admin_order_field \
= 'user__profile__main_character__corporation_name'
def _alliance(self, obj):
if (obj.user.profile.main_character
and obj.user.profile.main_character.alliance_id
):
return obj.user.profile.main_character.alliance_name
else:
return ''
_alliance.short_description = 'alliance (main)'
_alliance.admin_order_field \
= 'user__profile__main_character__alliance_name'
def _date_joined(self, obj):
return obj.user.date_joined
_date_joined.short_description = 'date joined'
_date_joined.admin_order_field = 'user__date_joined'
class AuthTSgroupAdmin(admin.ModelAdmin): class AuthTSgroupAdmin(admin.ModelAdmin):