2012-05-15 10 views
5

Mein FormWizard (Django 1.4) ermöglicht dem Benutzer, vor dem Abschluss des Assistenten hin und her zu gehen. Der Assistent behält alle vom Benutzer ausgefüllten Werte bei und zeigt sie an, falls der Benutzer zu einem Schritt zurückkehrt, den er bereits abgeschlossen hat.FormWizard und FileFields (Django 1.4)

Dies funktioniert gut, d. H. Für CharField, funktioniert aber nicht für FileFields. Falls der Benutzer eine Datei in einem Schritt mit einem FileField sendet und später zu diesem Schritt zurückkehrt, muss er erneut eine Datei hochladen.

Gibt es eine Möglichkeit, dass der Benutzer die Datei nicht erneut hochladen muss?

Bitte beachten Sie, dass die Formulardaten noch nicht in der Datenbank gespeichert wurden.

Antwort

2

Ich lief vor kurzem in das gleiche Problem und konnte es lösen, indem ich Djangos SessionWizardView (in meinem Fall NamedUrlSessionWizardView) herstellte und die Methode get_form überschrieb.

Basicly ich das folgende:

  • die Dateien erhalten, die für den Schritt bereits gespeichert sind.
  • Iterieren Sie über die aktuell übergebenen Dateien.
  • Wenn eine übermittelte Datei None ist, ignorieren Sie sie, andernfalls überschreiben Sie den bereits gespeicherten Wert. Hier

ist der Code:

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)