2012-05-15 10 views
5

FormWizard (Django 1.4), sihirbazı tamamlayana kadar kullanıcının ileri ve geri adım atmasını sağlar. Sihirbaz, kullanıcının doldurduğu tüm değerleri saklar ve kullanıcının halihazırda tamamladığı bir adıma geri dönmesi durumunda bunları görüntüler.FormWizard ve FileFields (Django 1.4)

Bu, örneğin CharField için iyi çalışır, ancak FileFields için çalışmaz. Kullanıcının FileField içeren bir adımda bir dosya göndermesi ve daha sonra bu aşamaya geri dönmesi durumunda, bir dosya yeniden yüklemesi gerekir.

Kullanıcının dosyayı yeniden yüklemesi gerekmeyecek bir yolu var mı?

Lütfen form verilerinin henüz veritabanına kaydedilmemiş olduğunu unutmayın.

cevap

2

Son zamanlarda aynı soruna rastladım ve Django'nun SessionWizardView (benim durumumda NamedUrlSessionWizardView) alt sınıfını kullanarak ve get_form yöntemini geçersiz kılarak bunu çözebiliriz.

  • zaten adım için depolanan dosyaları alın:

    Javascipt ben aşağıdakileri yapın.

  • Geçerli gönderilen dosyalar üzerinde yineleyin.
  • Gönderilen bir dosya Yok ise, dikkate almayın, başka bir deyişle kayıtlı olan değerin üzerine yazın.

    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) 
    
    : Burada

kodudur