2012-05-15 17 views
5

My FormWizard (Django 1.4) consente all'utente di andare avanti e indietro fino al completamento della procedura guidata. Il wizard mantiene tutti i valori che l'utente ha compilato e li visualizza nel caso in cui l'utente ritorni ad un passo che ha già completato.FormWizard e FileFields (Django 1.4)

Funziona bene, ad esempio, per CharField ma non funziona per i FileField. Nel caso in cui l'utente invii un file in una fase contenente un FileField e in seguito torni a questo passo, deve caricare nuovamente un file.

C'è un modo per cui l'utente non dovrà ricaricare il file?

Si noti che i dati del modulo non sono stati ancora salvati nel database.

risposta

2

Recentemente mi sono imbattuto nello stesso problema, e ho potuto risolverlo sottoclassi il SessionWizardView di Django (nel mio caso NamedUrlSessionWizardView), sovrascrivendo il metodo get_form.

Fondamentalmente io faccio la seguente:

  • ottenere i file che sono già memorizzati per il passo.
  • Iterate sui file attualmente inviati.
  • Se un file inviato è Nessuno, ignorarlo, altrimenti sovrascrivere il valore già memorizzato.

Ecco il codice:

from django.contrib.formtools.wizard.views import NamedUrlSessionWizardView 

class MyWizardView(NamedUrlSessionWizardView): 

    def get_form(self, step=None, data=None, files=None): 
     if step: 
      step_files = self.storage.get_step_files(step) 
     else: 
      step_files = self.storage.current_step_files 

     if step_files and files: 
      for key, value in step_files.items(): 
       if files.has_key(key) and files[key] is not None: 
        step_files[key] = files[key] 
     elif files: 
      step_files = files 

     return super(MyWizardView, self).get_form(step, data, step_files) 
Problemi correlati