Source code for groups.admin

"""Admin models for the groups app."""

from django.contrib import admin
from django.db.models.functions import Lower
from django.utils.html import format_html

from MangAdventure import filters, utils

from .models import Group, Member, Role


[docs]class MemberRoleInline(admin.StackedInline): """Inline admin model for :class:`~groups.models.Role`.""" model = Role extra = 1
[docs]class MemberAdmin(admin.ModelAdmin): """Admin model for :class:`~groups.models.Member`.""" inlines = (MemberRoleInline,) ordering = (Lower('name'),) list_display = ('name', '_twitter', 'discord', 'irc', '_reddit') search_fields = ('name', 'twitter', 'discord', 'irc', 'reddit') list_filter = ( ('roles__group__name', filters.related_filter('group')), ('roles__role', filters.related_filter('role')), ) def _twitter(self, obj: Member) -> str: if not obj.twitter: return '' return format_html( '<a href="https://twitter.com/{0}" rel="noopener noreferrer"' ' target="_blank">@{0}</a>', obj.twitter ) _twitter.short_description = 'twitter' _twitter.admin_order_field = 'twitter' def _reddit(self, obj: Member) -> str: if not obj.reddit: return '' return format_html( '<a href="https://reddit.com/u/{0}" rel="noopener noreferrer"' ' target="_blank">/u/{0}</a>', obj.reddit ) _reddit.short_description = 'reddit' _reddit.admin_order_field = 'reddit'
[docs]class GroupAdmin(admin.ModelAdmin): """Admin model for :class:`~groups.models.Group`.""" exclude = ('id',) ordering = (Lower('name'),) list_display = ('image', 'name', '_website', 'description') search_fields = ('name', 'website', 'description') list_display_links = ('name',)
[docs] def image(self, obj: Group) -> str: """ Get the logo of the group as an HTML ``<img>``. :param obj: A ``Group`` model instance. :return: An ``<img>`` tag with the group's logo. """ return utils.img_tag(obj.logo, 'logo', height=25)
image.short_description = 'logo' def _website(self, obj: Group) -> str: if not obj.website: return '' return format_html( '<a href="{0}" rel="noopener noreferrer"' ' target="_blank">{0}</a>', obj.website ) _website.short_description = 'website' _website.admin_order_field = 'website'
admin.site.register(Group, GroupAdmin) admin.site.register(Member, MemberAdmin) __all__ = ['MemberRoleInline', 'MemberAdmin', 'GroupAdmin']