powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / django FormWizard
3 сообщений из 3, страница 1 из 1
django FormWizard
    #39399653
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Просьба проконсультировать каким образом можно данные, введённые на первом шаге мастера форм (FormWizard), использовать во втором шаге (как параметр запроса к БД). Вот более точно сформулировано:

forms.py
Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
# Форма первого шага
class W1_ParamForm(forms.Form):
	cities = forms.ModelChoiceField( label = 'Город', empty_label=None, 
		initial = '1', 
		queryset=City.objects.all().order_by('name') )

#Форма второго шага
class W1_SelectForm(forms.Form):
	oEstates = MyModelMultipleChoiceField( 
		queryset = RealEstate.objects.
			filter(city_id__exact = ...).
			order_by('priceM'),
		widget = forms.CheckboxSelectMultiple,
		required = False)



Здесь ... - это должен быть параметр, содержащий код города, выбранного в первой форме W1_ParamForm. В этом и задача!

views.py
Код: python
1.
2.
3.
4.
5.
6.
7.
# Это вью
class W1_Estim(SessionWizardView):
	template_name = "w1_estim.html"

	def done(self, form_list, **kwargs):
		form_data = [form.cleaned_data for form in form_list]		
		return render_to_response('w1_done.html', {'form_data': form_data})



urls.py
Код: python
1.
2.
3.
4.
5.
urlpatterns = [
 ...
# Это запуск мастера
   url(r'^doestim$', W1_Estim.as_view([W1_ParamForm,W1_SelectForm]), name='doestim'),
 ...
...
Рейтинг: 0 / 0
django FormWizard
    #39399788
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть соображения? Заранее спасибо!
...
Рейтинг: 0 / 0
django FormWizard
    #39400555
gsv1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Нашел решение! Чтобы получить данные с предыдущего шага надо

1. Реализовать метод get_form_initial(self, step) для view class W1_Estim

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
def get_form_initial(self, step):
   if step == '1': 
      # on SECOND step get data of first step
      step0data = self.storage.get_step_data('0')
      if step0data:
         cities = step0data.get('cities', '')
         return self.initial_dict.get(step, {'cities': cities})
   return self.initial_dict.get(step, {})



2. Реализовать конструктор для form class W1_SelectForm

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
def __init__(self, *args, **kwargs):
   c = kwargs['initial']['cities']
   self.oEstates = ModelMultipleChoiceField( 
      queryset = RealEstate.objects.
      filter(city_id = c).
      order_by('priceM'),
      widget = forms.CheckboxSelectMultiple,
      required = False)
   # поле oEstates НЕОБХОДИМО включить в "declared_fields"!!!
   self.declared_fields['oEstates']=self.oEstates
   # конструктор суперкласса следует вызвать ПОСЛЕ включения поля в "declared_fields" !!!
   super(W1_SelectForm, self).__init__(*args, **kwargs)



Это всё!
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / django FormWizard
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]