Source code for oioioi.teams.admin

from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from oioioi.base import admin
from oioioi.contests.admin import ContestAdmin, contest_site
from oioioi.contests.menu import contest_admin_menu_registry
from oioioi.contests.utils import is_contest_admin
from oioioi.teams.forms import TeamForm
from oioioi.teams.models import Team, TeamMembership, TeamsConfig
from oioioi.teams.utils import teams_enabled


[docs]class MembersInline(admin.TabularInline):
[docs] model = TeamMembership
[docs] fields = [ 'user', ]
[docs]class TeamsAdmin(admin.ModelAdmin):
[docs] list_display = ['name', 'join_key']
[docs] fields = ['name', 'login']
[docs] search_fields = ['name']
[docs] inlines = ( MembersInline, )
[docs] form = TeamForm
[docs] def has_add_permission(self, request): return is_contest_admin(request)
[docs] def has_change_permission(self, request, obj=None): return is_contest_admin(request)
[docs] def has_delete_permission(self, request, obj=None): return self.has_change_permission(request, obj)
[docs] def get_queryset(self, request): qs = super(TeamsAdmin, self).get_queryset(request) qs = qs.filter(contest=request.contest) return qs
[docs] def save_form(self, request, *args, **kwargs): obj = super(TeamsAdmin, self).save_form(request, *args, **kwargs) obj.contest = request.contest return obj
contest_site.contest_register(Team, TeamsAdmin) contest_admin_menu_registry.register( 'teams', _("Teams"), lambda request: reverse('oioioiadmin:teams_team_changelist'), condition=teams_enabled & is_contest_admin, order=30, )
[docs]class TeamsConfigInline(admin.TabularInline):
[docs] model = TeamsConfig
[docs] category = _("Advanced")
[docs] def has_add_permission(self, request, obj=None): return is_contest_admin(request)
[docs] def has_change_permission(self, request, obj=None): return is_contest_admin(request)
[docs] def has_delete_permission(self, request, obj=None): return self.has_change_permission(request, obj)
[docs]class TeamsAdminMixin(object): """Adds :class:`~oioioi.teams.models.TeamsConfig` to an admin panel.""" def __init__(self, *args, **kwargs): super(TeamsAdminMixin, self).__init__(*args, **kwargs) self.inlines = tuple(self.inlines) + (TeamsConfigInline,)
ContestAdmin.mix_in(TeamsAdminMixin)