0494a36681
This reverts commit 411f3da45e
.
58 lines
2.1 KiB
Python
58 lines
2.1 KiB
Python
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)
|