2016-11-18 65 views
0

我試圖從django嚮導視圖中的一個表單上傳文件。但是,當我上傳一個文件,然後單擊提交,該文件只消失,我得到一個'此字段是必需的'錯誤。django文件上傳表單無法提交和上傳

Models.py

class Bill(models.Model): 
    service = models.ForeignKey(UserService) 
    bill = models.FileField(upload_to='bills', validators=[validate_file_extension]) 
    raw_data = models.TextField(null=True) 
    meta_data = models.TextField(null=True) 

Forms.py

class BillUploadForm(forms.ModelForm): 
    class Meta: 
     model = models.Bill 
     fields = ['bill'] 

views.py

SIGNUP_FORMS = [ 
    ('signup', SignupForm), 
    ('address', AddressForm), 
    ('direct_debit', UserDirectDebitForm), 
    ('account', AccountForm), 
    ('user_service', UserServiceForm), 
    ('bill_upload', BillUploadForm), 
] 

TEMPLATES = { 
    'signup': 'site/signup.html', 
    'address': 'site/signup_address.html', 
    'direct_debit': 'site/signup_directdebit.html', 
    'account': 'site/signup_directdebit.html', 
    'user_service': 'site/signup_directdebit.html', 
    'bill_upload': 'site/signup_directdebit.html', 
} 


class SignupWizard(SessionWizardView): 
    location = os.path.join(settings.MEDIA_ROOT, 'temp', 'files') 
    file_storage = FileSystemStorage(location) 

    def get_template_names(self): 
     return [TEMPLATES[self.steps.current]] 

    def dispatch(self, request, *args, **kwargs): 
     if request.user.is_authenticated(): 
      return redirect(settings.LOGIN_REDIRECT_URL) 
     return super().dispatch(request, *args, **kwargs) 

    def done(self, form_list, form_dict, **kwargs): 
     cd = form_dict['signup'].cleaned_data 
     user = User.objects.create_user(
      username=cd['email'].split('@')[0], 
      email=cd['email'], 
      password=cd['password1'], 
      first_name=cd['first_name'], 
      last_name=cd['last_name'], 
     ) 
     user.save() 

     address = form_dict['address'].save(commit=False) 
     address.user = user 
     address.save() 

     direct_debit = form_dict['direct_debit'].save(commit=False) 
     direct_debit.user = user 
     direct_debit.save() 

     account = form_dict['account'].save(commit=False) 
     account.address = address 
     account.payment = direct_debit 
     account.save() 

     user_service = form_dict['user_service'].save(commit=False) 
     user_service.account = account 
     user_service.save() 

     bill_upload = form_dict['bill_upload'].save(commit=False) 
     bill = form_dict['bill_upload'].cleaned_data['bill'] 
     bill_upload.bill = bill 
     bill_upload.service = user_service 
     bill_upload.save() 
     self.file_storage.delete(bill.name) 

     complete_signup(self.request, user, settings.ACCOUNT_EMAIL_VERIFICATION, settings.LOGIN_REDIRECT_URL) 
     return redirect(settings.LOGIN_REDIRECT_URL) 

回答

1

您還沒有給出模板代碼。看看你的代碼,並確保在你的<form>中包含enctype="multipart/form-data"

+0

謝謝我沒有發佈模板,因爲我從來沒有猜到這是問題的可能。你絕對是位,謝謝你的幫助。 – Yunti

相關問題