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. Большое спасибо за помощь.

Вернуться на верх