2013-06-12 20 views
2

我試圖建立個人資料圖像上傳字段:django的ImageField的上傳總是抱怨沒有文件被選擇

class SignUpForm(forms.Form): 
    username = forms.CharField(max_length=30, \ 
     error_messages = {'required': 'Need a username'}) 
    email = forms.EmailField(max_length=30, \ 
     error_messages = {'required': 'Need an email', 'invalid': 'Email is invalid'}) 
    profile_image = forms.ImageField(error_messages = {'required': 'Please select a profile image'}) 

和負載數據在views.py:

if request.method != 'POST': 
    return HttpResponseServerError("Only POST requests allowed.") 
    form = SignUpForm(request.POST, request.FILES) 
    logger.info(request.FILES) # this always prints empty '{}' 

形式是:

form(enctype="multipart/form-data", method='post') 
     label(for='username') Username 
     input#name(name='username', type='text') 
     label(for='email') Email 
     input#email(name='email', type='email') 
     label(for='profile_image') Profile Image 
     input#profile_image(name='profile_image', type='file') 

我提交的數據的方法是在JS:

$('form').submit(function(e){ 
    e.preventDefault(); 
    $("#signup-errors").hide(); 
    var form = $(e.target); 
    var post = $.post('/user/create/', form.serialize(), redirectIfSuccess); 
    post.fail(function(xhr, ajaxOptions, thrownError) { 
    $("#signup-errors").html(xhr.getResponseHeader("errors")).show(); 
    }); 
}); 

有人可以提示我什麼可能是錯的?我已經搜查和採取的步驟,但這些文件從來不張貼通... :(

感謝!

回答

2

根據您的更新,問題是,你正在使用AJAX。

上傳。文件異步不「易」這是支持與HTLM5但不是所有的瀏覽器 - 你絕對不能依靠這種方法還

How can I upload files asynchronously?

他們的方式,我建議,使這項工作是看。一些ajax文件上傳p lugins(使用iframe或flash)並使用它們的API來執行POST。

http://blueimp.github.io/jQuery-File-Upload/

+0

對不起,我錯過了js部分,現在編輯! – Frost

相關問題