2009-11-11 2 views
8

Ho un grande modello Django (73 campi) che verrà collegato a un ModelForm. Mi piacerebbe utilizzare una combinazione delle funzionalità trovate le app di contribuzione modulo e di anteprima modulo.Procedura guidata maschera Django e anteprima con ModelForm

I.e., i campi del modulo verrebbero suddivisi su più pagine e l'utente avrebbe la possibilità di rivedere/visualizzare in anteprima i dati prima che l'istanza del modello venga creata.

Esistono buone pratiche per questo tipo di cose o codice di esempio?

+1

Non vale la pena una risposta, ma in ogni caso: Può essere problematico da usare FormWizard per qualsiasi cosa al di là di cose più banali (a Almeno, era per me). Ecco una cosa: non è possibile controllare ciò che viene passato a '__init__' del modulo in modo ovvio (oltre ai valori iniziali). Quindi, come hai intenzione di fornire un argomento parola chiave "istanza" al '__init__' del modulo? Certo che ci sono * modi - io, ad esempio, l'ho risolto dichiarando una classe interiore, che eredita dal ModelForm necessario e sovrascrivendo '__init__'. Quindi devi assegnare quella classe a un elemento di .form_list. Non molto ovvio ... – shylent

+1

... e devi gestire molto queste cose se vuoi usare FormWizard. Non sto dicendo che FormWizard è cattivo, ma è, certamente, non molto facile da usare. E 73 campi? Lo so, questo potrebbe sembrare stupido, ma, forse, c'è un modo per semplificare il compito suddividendolo in una serie di attività più piccole? Ti piace ristrutturare i tuoi modelli e trattare separatamente ognuno di loro o qualcosa del genere? – shylent

+0

Grazie per il feedback, shylent. credici o no i 73 campi sono semplificati. Sono solo un sacco di dati che dobbiamo raccogliere. :-) –

risposta

1

Faccio una cosa simile al mio primo progetto Django. Utilizzando FormWizard basato su sessione, l'ho personalizzato in modo che l'utente possa interrompere il sottotitolo di dati in qualsiasi forma.

A quel punto è possibile utilizzare FormPreview probabilmente per mostrare informazioni o semplicemente generare dinamicamente il modulo e mostrarlo all'utente. I dati rimangono nella sessione.

0

è possibile passare l'intero dizionario per il contesto e poi accedervi nel modello:

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