2009-11-11 39 views
8

Tengo un gran modelo de Django (73 campos) que se conectará a un ModelForm. Me gustaría utilizar una combinación de la funcionalidad encontrada en las aplicaciones de contribución Form Wizard y Form Preview.Django Form Wizard y Vista previa con ModelForm

Es decir, los campos del formulario se dividirían en varias páginas, y el usuario tendría la oportunidad de revisar/obtener una vista previa de los datos antes de que se cree la instancia del modelo.

¿Existe alguna de las mejores prácticas para este tipo de cosas, o código de ejemplo?

+1

No vale la pena una respuesta, pero de todas formas: Puede ser problemático utilizar FormWizard para cualquier cosa más allá de las cosas más triviales (por lo al menos, fue para mí). Aquí hay una cosa: no se puede controlar lo que se pasa al '__init__' del formulario de una manera obvia (además de los valores iniciales). Entonces, ¿cómo va a proporcionar un argumento de palabra clave "instancia" al '' __init__' del formulario? Por supuesto, hay * formas *: yo, por ejemplo, lo resolví declarando una clase interna, que hereda del ModelForm necesario y anula '' init ''. Luego debe asignar esa clase a un elemento de .form_list. No es muy obvio ... – shylent

+1

... y tienes que lidiar mucho con tales cosas si vas a usar FormWizard. No estoy diciendo que FormWizard sea malo, pero ciertamente no es muy fácil de usar. Y 73 campos? Lo sé, esto puede sonar tonto, pero, tal vez, hay una manera de simplificar la tarea dividiéndola en una serie de tareas más pequeñas. ¿Como reestructurar sus modelos y tratar por separado con cada uno de ellos o algo así? – shylent

+0

Gracias por los comentarios, tímido. créanlo o no, los 73 campos se simplifican. Es solo una gran cantidad de datos que debemos recopilar. :-) –

Respuesta

1

Hago algo similar en mi primer proyecto de Django. Usando FormWizard basado en sesiones, lo personalicé para que el usuario pueda dejar de someter datos en cualquier forma.

En ese punto, puede utilizar FormPreview probablemente para mostrar información o simplemente generar dinámicamente el formulario y mostrarlo al usuario. Los datos se quedan en la sesión.

0

se puede pasar todo el diccionario al contexto y luego acceder a ella en su plantilla:

# 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 }} 
Cuestiones relacionadas