Próbuję utworzyć prosty wielostronicowy formularz Django przy użyciu FormWizard. Formularz powinien być następujący:Zdobądź wcześniej wprowadzone informacje w Django FormWizard
- Pozwól odwiedzającemu wpisać imię i nazwisko w formularzu.
- Przejdź do następnej strony, na której wyświetlone zostanie poprzednie imię i nazwisko, pojawi się również pole na tej stronie, na które użytkownik wpisze wiadomość.
- Wizistor zostanie przeniesiony na stronę Django done.html, gdzie wszystkie informacje będą przechowywane i wyświetlane.
W kroku 2 mam problemy z określeniem sposobu wyświetlania informacji wprowadzonych przez odwiedzającego w kroku 1. Zamieszczam kod formularzy i dwóch szablonów używanych w kroku 1 i 2 poniżej :
forms.py
from django import forms
from django.shortcuts import render_to_response
from django.contrib.formtools.wizard import FormWizard
class ContactWizard(FormWizard):
def done(self, request, form_list):
return render_to_response('done.html', {
'form_data': [form.cleaned_data for form in form_list],
})
def get_template(self, step):
return 'buydomain/templates/reg%s.html' % step
class Form1(forms.Form):
firstName = forms.CharField()
lastName = forms.CharField()
class Form2(forms.Form):
message = forms.CharField(widget=forms.Textarea)
szablonu krok 1:
{% block content %}
<p>Step {{ step }} of {{ step_count }}</p>
<form action="." method="post">
<table>
{{ form }}
</table>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
<input type="submit">
</form>
{% endblock %}
szablon do kroku 2:
{% block content %}
<p>Step {{ step }} of {{ step_count }}</p>
{% comment %}
Show values entered into Form1 here !
{% endcomment %}
<form action="." method="post">
<table>
{{ form }}
</table>
<input type="hidden" name="{{ step_field }}" value="{{ step0 }}" />
{{ previous_fields|safe }}
<input type="submit">
</form>
{% endblock %}
Przepraszam, jeśli nie mam pewności co do tego, co chcę osiągnąć i mam nadzieję, że ktoś dostarczy rozwiązanie. Z góry dziękuję.
jaki sposób późniejszego dostępu klasa forma dane extra_context? – BozoJoe
'extra_context' jest przekazywane przez' FormWizard' do szablonu do renderowania. –
Nadal przegłosowałem tę odpowiedź, ale chciałem poinformować innych, że od django 1.4 podpis metody process_step został zmieniony na tylko przekazać w obiekcie formularza. Jak stwierdził @bpoetz, proszę usiąść z dokumentami i przeczytać je, aby znaleźć rozwiązanie, które będzie pasować do twoich potrzeb. – avelis