from django.contrib import admin from django.forms import ModelForm, ModelMultipleChoiceField from django.utils.translation import gettext_lazy as _ from judge.models import Problem from judge.widgets import AdminHeavySelect2MultipleWidget class ProblemGroupForm(ModelForm): problems = ModelMultipleChoiceField( label=_("Included problems"), queryset=Problem.objects.all(), required=False, help_text=_("These problems are included in this group of problems"), widget=AdminHeavySelect2MultipleWidget(data_view="problem_select2"), ) class ProblemGroupAdmin(admin.ModelAdmin): fields = ("name", "full_name", "problems") form = ProblemGroupForm def save_model(self, request, obj, form, change): super(ProblemGroupAdmin, self).save_model(request, obj, form, change) obj.problem_set.set(form.cleaned_data["problems"]) obj.save() def get_form(self, request, obj=None, **kwargs): self.form.base_fields["problems"].initial = ( [o.pk for o in obj.problem_set.all()] if obj else [] ) return super(ProblemGroupAdmin, self).get_form(request, obj, **kwargs) class ProblemTypeForm(ModelForm): problems = ModelMultipleChoiceField( label=_("Included problems"), queryset=Problem.objects.all(), required=False, help_text=_("These problems are included in this type of problems"), widget=AdminHeavySelect2MultipleWidget(data_view="problem_select2"), ) class ProblemTypeAdmin(admin.ModelAdmin): fields = ("name", "full_name", "problems") form = ProblemTypeForm def save_model(self, request, obj, form, change): super(ProblemTypeAdmin, self).save_model(request, obj, form, change) obj.problem_set.set(form.cleaned_data["problems"]) obj.save() def get_form(self, request, obj=None, **kwargs): self.form.base_fields["problems"].initial = ( [o.pk for o in obj.problem_set.all()] if obj else [] ) return super(ProblemTypeAdmin, self).get_form(request, obj, **kwargs)