Я пытаюсь динамически добавлять варианты выбора на основе переменной сеанса.
У меня есть файл views.py с формой выбора, которая перенаправляет на мою вторую форму (которая не отображает мои варианты выбора)
views.py:
def teacher(request):
if request.method == 'GET':
form = TeacherForm()
else:
form = TeacherForm(request.POST)
if form.is_valid():
date_list = []
if form.cleaned_data['teacher'] == 'No Preference':
for i in Availability.objects.all():
date_list.append(str(i.dates))
request.session['choices'] = tuple(date_list)
return redirect('book-appt')
context = {
'form': form,
}
return render(request, 'main/booktchr.html', context)
после успешной отправки вышеуказанного представления пользователь отправляется в другое представление с другой формой. В этом втором представлении в следующей форме init я пытаюсь заполнить выбор хранилищами в переменной сеанса выше.
forms.py:
class BookingForm(forms.Form):
def __init__(self,request,*args,**kwargs):
super (BookingForm,self).__init__(*args,**kwargs)
self.fields['booking_date'].choices = request.session['choices']
booking_date = forms.CharField(widget=forms.Select(attrs={'class': 'form-control'}))
Однако форма отображается и поле выбора пусто. Любая помощь очень ценится.
Я не совсем уверен, что это лучший способ достичь того, чего я пытаюсь достичь, поэтому любые другие методы приветствуются, в основном я пытаюсь установить booking_date
выбор динамически зависит от того, что установлено в переменной request.session['choices']
в представлении.
спасибо
РЕДАКТИРОВАТЬ: все получилось. Пришлось изменить мои views.py следующим образом:
def teacher(request):
if request.method == 'GET':
form = TeacherForm()
else:
form = TeacherForm(request.POST)
if form.is_valid():
date_list = [("", "date")]
if form.cleaned_data['teacher'] == 'No Preference':
for i in Availability.objects.all():
date_list.append((str(i.user), str(i.dates)))
request.session['choices'] = date_list
return redirect('book-appt')
context = {
'form': form,
}
return render(request, 'main/booktchr.html', context)
и изменить мое поле в форме на booking_date = forms.ChoiceField()