2009-11-11 3 views
8

У меня есть большая модель Django (73 поля), которая будет подключена к ModelForm. Я хотел бы использовать комбинацию функциональных возможностей, найденных в приложении «Мастера форм» и «Формирование предварительного просмотра».Django Form Wizard и Preview с ModelForm

I.e., поля формы будут разделены на несколько страниц, и у пользователя будет возможность просмотреть/просмотреть данные до создания экземпляра модели.

Есть ли какие-либо передовые методы для такого типа вещей или пример кода?

+1

Это не стоит ответ, но все равно: это может быть проблематично использовать Мастер форм для ничего, кроме самых тривиальных вещей (в по крайней мере, это было для меня). Вот одна вещь: вы не можете контролировать то, что передается в форме '__init__' очевидным образом (помимо начальных значений). Итак, как вы собираетесь предоставить аргумент ключевого слова «instance» для формы '__init__'? Конечно, есть * способы - я, например, решил его, объявив внутренний класс, который наследуется от необходимого ModelForm и переопределяет '__init__'. Затем вы должны назначить этот класс элементу .form_list. Не очень очевидно ... – shylent

+1

... и вам придется иметь дело с такими вещами, если вы собираетесь использовать FormWizard. Я не говорю, что FormWizard плохой, но это, конечно, не очень просто. И 73 поля? Я знаю, это может показаться глупым, но, возможно, есть способ упростить задачу, разбив ее на несколько меньших задач? Как реструктурировать свои модели и работать отдельно с каждым из них или чем-то еще? – shylent

+0

Спасибо за отзыв, shylent. верьте или нет 73 поля _is_ упрощены. Нам нужно собрать очень много данных. :-) –

ответ

1

Я делаю подобное в своем первом проекте Django. Используя основанный на сеансах FormWizard, я настроил его так, чтобы пользователь мог остановить суббиллинг данных в любой форме.

В этот момент вы можете использовать FormPreview, вероятно, для отображения информации или просто для динамического создания формы и отображения ее пользователю. Данные остаются в сеансе.

0

Вы можете передать весь словарь в контекст, а затем получить доступ к нему в шаблоне:

# views.py 
def get_context_data(self, **kwargs): 
    context = super(MyWizard, self).get_context_data(**kwargs) 
    context['all_data'] = self.get_all_cleaned_data() 
    return context 

# template.html 
{{ all_data }} 
Смежные вопросы