по какой-то причине я не могу заполнить поля формы, как у меня в прошлом. вот соответствующие биты:Конструктор формы django не возвращает поля?
views.py
def selectEvent(request, user=None):
if not user:
userID = request.user.id
if request.method == 'POST':
qform = eventForm(request.POST, user=userID)
if qform.is_valid():
qryData = qform.cleaned_data
event = qryData['event']
qurl = '/showGG/getWedGuest/%s' % (event)
return HttpResponseRedirect(qurl)
else:
qform = eventForm(user=userID)
return render(request, 'showGG/getEvent.html', {'form': qform})
forms.py
class eventForm(forms.Form):
def __init__(self, *args, **kwargs):
user=kwargs.pop('user')
super(eventForm, self).__init__(*args, **kwargs)
elist = [(e,e.name) for e in Event.objects.filter(organizer_id__exact=user)]
print 'eventForm: elist=',elist
event = forms.ChoiceField(choices=elist)
я нужен сложный eventForm.__init__()
Потому что я хочу передать ему переменную, но показывает печать линии что он производит список, который я ожидаю:
eventForm: elist= [(<Event: cd2 - 2013-08-01 00:17:39+00:00>, u'cd2')]
но когда i получить возвращенный qform
назад в views.selectEvent
, и его fields
и base_fields
переменные - это пустые словари? зачем это было?
благодаря Daniel, я мог сказать, я играл с мета-бит (:., Но ваш 'self.fields [«событие»] = выбор elist' вызывает KeyError в отношении 'event', независимо от того, поместил ли я строку' event = forms.ChoiceField() 'до этого – rikb
, если я поставил вашу строку' event = forms.ChoiceField() 'перед' def __init__', или после него, я получаю такое же поведение пустых полей. – rikb
Даниэль, ваше решение работает! Поведение «пустых полей», которое я описал, оказалось результатом другой ошибки. – rikb