Django MultiValueField и MultiWidget ChoiceField пользовательские варианты выбора
Я пытаюсь создать форму, которая позволяет студентам запрашивать курсы, и я работал над полем выбора времени, я хотел бы, чтобы поле выбирало день недели и время дня, но часы каждого курса разные, поэтому я хотел бы предоставить доступное время в форме курса вместо определения поля, вот что я пробовал:
class ClassTimeWidgit(forms.MultiWidget):
def __init__(self, time, attrs=None) -> None:
widgets = [
forms.Select(choices=[
('Monday', 'Monday'),
('Tuesday', 'Tuesday'),
('Wednesday', 'Wednesday'),
('Thursday', 'Thursday'),
('Friday', 'Friday'),
('Saturday', 'Saturday'),
('Sunday', 'Sunday'),
], attrs={'style':'width:130px'}),
forms.Select(choices=time, attrs={'style':'width:130px'})
]
super(ClassTimeWidgit, self).__init__(widgets, attrs)
def decompress(self, value):
if value:
return value.split(' ')
return ['', '']
class ClassTimeField(forms.MultiValueField):
widget = ClassTimeWidgit
def __init__(self, time, **kwargs) -> None:
f = (
forms.ChoiceField(choices=[
('Monday', 'Monday'),
('Tuesday', 'Tuesday'),
('Wednesday', 'Wednesday'),
('Thursday', 'Thursday'),
('Friday', 'Friday'),
('Saturday', 'Saturday'),
('Sunday', 'Sunday'),
]
),
forms.ChoiceField(choices=time)
)
super().__init__(fields=f, require_all_fields=True, **kwargs)
def compress(self, data_list):
return ' '.join(data_list)
class RequestCourseForm(forms.ModelForm):
teacher = forms.ModelChoiceField(queryset=User.objects.filter(profile__teacher_status=True))
class_count = forms.IntegerField(widget=forms.Select(choices=[(10,10), (20,20)]))
class_time = ClassTimeField(time=[(f'{i}:00', f'{i}:00') for i in range(8,21)])
class Meta:
model = Request
fields = ['teacher', 'class_count', 'class_time']
Я пытаюсь сделать так, чтобы я мог установить доступное время в форме, как работает forms.ChoiceField
. Большое спасибо за помощь.