Source code for oioioi.pa.admin

from django.utils.translation import gettext_lazy as _

from oioioi.base import admin
from oioioi.contests.admin import ProblemInstanceAdmin
from oioioi.contests.utils import is_contest_admin
from oioioi.pa.forms import PARegistrationForm
from oioioi.pa.models import PAProblemInstanceData, PARegistration
from oioioi.participants.admin import ParticipantAdmin


[docs]class PARegistrationInline(admin.StackedInline):
[docs] model = PARegistration
[docs] fk_name = 'participant'
[docs] form = PARegistrationForm
[docs] can_delete = False
[docs] inline_classes = ('collapse open',)
# We don't allow admins to change users' acceptance of contest's terms.
[docs] exclude = ('terms_accepted',)
[docs]class PARegistrationParticipantAdmin(ParticipantAdmin):
[docs] list_display = ParticipantAdmin.list_display
[docs] inlines = tuple(ParticipantAdmin.inlines) + (PARegistrationInline,)
[docs] readonly_fields = ['user']
[docs] def has_add_permission(self, request): return request.user.is_superuser
[docs] def has_delete_permission(self, request, obj=None): return request.user.is_superuser
[docs] def get_actions(self, request): actions = super(PARegistrationParticipantAdmin, self).get_actions(request) if 'delete_selected' in actions: del actions['delete_selected'] return actions
[docs]class PAProblemInstanceInline(admin.TabularInline):
[docs] model = PAProblemInstanceData
[docs] fields = ['division']
[docs] def has_delete_permission(self, request, obj=None): return False
[docs] def get_readonly_fields(self, request, obj=None): if is_contest_admin(request): return super(PAProblemInstanceInline, self).get_readonly_fields( request, obj ) return self.get_fields(request, obj)
[docs]class PAProblemInstanceAdminMixin(object): """Adds :class:`~oioioi.pa.models.PAProblemInstanceData` to an admin panel.""" def __init__(self, *args, **kwargs): super(PAProblemInstanceAdminMixin, self).__init__(*args, **kwargs) self.inlines = tuple(self.inlines) + (PAProblemInstanceInline,)
ProblemInstanceAdmin.mix_in(PAProblemInstanceAdminMixin)