pretalx-musicrate/pretalx_musicrate/forms.py

40 lines
1.6 KiB
Python
Raw Normal View History

from django import forms
from django_scopes.forms import SafeModelChoiceField, SafeModelMultipleChoiceField
2023-12-13 23:58:00 +01:00
from i18nfield.forms import I18nModelForm
from .models import MusicrateSettings
class MusicrateSettingsForm(I18nModelForm):
def __init__(self, *args, event=None, **kwargs):
self.instance, _ = MusicrateSettings.objects.get_or_create(event=event)
super().__init__(*args, **kwargs, instance=self.instance, locales=event.locales)
if not event.submission_types.count():
self.fields.pop("submission_types")
else:
self.fields["submission_types"].queryset = event.submission_types.all()
self.fields["genre_question"].queryset = (
event.questions.exclude(pk=self.instance.origin_question.pk)
if self.instance.origin_question
else event.questions.all()
)
self.fields["origin_question"].queryset = (
event.questions.exclude(pk=self.instance.genre_question.pk)
if self.instance.genre_question
else event.questions.all()
)
2023-12-13 23:58:00 +01:00
class Meta:
model = MusicrateSettings
fields = ("submission_types", "genre_question", "origin_question")
widgets = {
"submission_types": forms.SelectMultiple(attrs={"class": "select2"}),
"genre_question": forms.Select(attrs={"class": "select2"}),
"origin_question": forms.Select(attrs={"class": "select2"}),
}
field_classes = {
"submission_types": SafeModelMultipleChoiceField,
"genre_question": SafeModelChoiceField,
"origin_question": SafeModelChoiceField,
}