Преобразование QuerySet в список в Django для ModelMultipleChoiceField
TIMESLOT_LIST = (
(5, '09:00 – 09:30'),
(9, '09:30 – 10:00'),
(2, '10:00 – 10:30'),
)
class AvailabilitiesForm(forms.Form):
time_slot = forms.ModelMultipleChoiceField(queryset = None, widget=forms.CheckboxSelectMultiple)
def __init__(self, *args, **kwargs):
date = kwargs.pop('date')
super(AvailabilitiesForm, self).__init__(*args, **kwargs)
#choices = getChoices(letter)
self.fields['time_slot'].queryset = Appointment.objects.filter(date = date).values_list('time_slot', flat = True)
Отображается :
Я хочу :
Как я могу использовать TIMESLOT_LIST для отображения строки "9h00 - 9h30", а не 5?
Во время прохождения, как я могу вывести пункты пули?
вы можете сделать следующее:-
from django.utils.translation import gettext_lazy as _
class Appointment(models.Model):
class TimeSlot(models.TextChoices):
FIRST_T = '5', _('9:00 - 09:30')
SECOND_T = '9', _('09:30 - 10:00')
THIRD_T = '2', _('10:00 - 10:30')
time_slot = models.CharField(max_length=1,choices=TimeSlot.choices,default=TimeSlot.FIRST_T)
class AvailabilitiesForm(forms.Form):
time_slot = forms.MultipleChoiceField(widget=forms.CheckboxSelectMultiple)
def __init__(self,*args,**kwargs):
super().__init__(*args,**kwargs)
d1 = kwargs.pop('date')
ava_time = []
for i in Appointment.objects.filter(date=d1):
for x in Appointment.TimeSlot.choices:
if x[0] == i.time_slot:
ava_time.append(x)
self.fields['time_slot'].choices = ava_time