Source code for oioioi.testspackages.admin

from django.db import models
from django.forms import Textarea
from django.urls import reverse
from django.utils.translation import gettext_lazy as _

from oioioi.base import admin
from oioioi.base.admin import NO_CATEGORY
from oioioi.base.utils import make_html_link
from oioioi.contests.utils import is_contest_admin
from oioioi.problems.admin import ProblemAdmin
from oioioi.programs.models import Test
from oioioi.testspackages.forms import TestsPackageInlineFormSet
from oioioi.testspackages.models import TestsPackage


[docs]class TestsPackageInline(admin.TabularInline):
[docs] formset = TestsPackageInlineFormSet
[docs] model = TestsPackage
[docs] can_delete = True
[docs] extra = 0
[docs] readonly_fields = ['package_link']
[docs] fields = ['name', 'description', 'tests', 'publish_date', 'package_link']
[docs] problem = None
[docs] formfield_overrides = { models.TextField: {'widget': Textarea(attrs={'rows': 10, 'cols': 30})}, }
[docs] category = NO_CATEGORY
[docs] def has_add_permission(self, request, obj=None): return is_contest_admin(request)
[docs] def has_delete_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 get_formset(self, request, obj=None, **kwargs): self.problem = obj return super(TestsPackageInline, self).get_formset(request, obj, **kwargs)
[docs] def formfield_for_manytomany(self, db_field, request, **kwargs): # It should filter tests from main_problem_instance if db_field.name == 'tests' and getattr(self, 'problem', None): kwargs['queryset'] = Test.objects.filter( problem_instance=self.problem.main_problem_instance ) return super(TestsPackageInline, self).formfield_for_manytomany( db_field, request, **kwargs )
[docs] package_link.short_description = _("Package file")
[docs]class TestsPackageAdminMixin(object): """Adds :class:`~oioioi.testspackages.models.TestsPackage` to an admin panel. """ def __init__(self, *args, **kwargs): super(TestsPackageAdminMixin, self).__init__(*args, **kwargs) self.inlines = tuple(self.inlines) + (TestsPackageInline,)
ProblemAdmin.mix_in(TestsPackageAdminMixin)