Я пытаюсь реализовать form.ChoiceField() со значениями из представления. Я уже могу это сделать, если объявлю варианты в form.py, но это не то, что мне нужно.
просмотров.py:
def add_crime(request):
values = [('1','um'),('2','dois'),('3','tres')]
if request.method == 'POST':
form = AddCrimeForm(request.POST, values)
if form.is_valid():
# do stuff
return redirect('show_crime')
else:
form = AddCrimeForm(request.GET)
return render(request, 'add_crime.html', {'form': form})
формы.py:
class AddCrimeForm(forms.Form):
tests = forms.ChoiceField()
def __init__(self, testList, args, **kwargs):
self.testList = testList
super(AddCrimeForm,self).__init__(*args, **kwargs) # testList not in args!
self.fields['tests'].widget = forms.CheckboxSelectMultiple()
self.fields['tests'].choices = self.testList
Ошибка:
AttributeError: 'tuple' object has no attribute 'get'
Судя по отзывам, нужно ли мне реализовать еще один __init__
с одним аргументом в forms.py? Это то, что я бы попробовал на Java.
Моя конечная цель - реализовать два ChoiceField, а второй будет зависеть от первого. Есть ли способ лучше?
AddCrimeForm
должен бытьvalues
. Вы также забыли добавить звездочки для*args
. - person Willem Van Onsem   schedule 07.11.2018