2014-09-02 69 views
1

我無法使用django香脆形式正確上傳圖像字段。窗體和頁面上的其他所有內容都可以正常工作,但圖像字段不會出錯或保存,它只是通過它。我能夠通過管理員添加圖像就好了,它只能以我脆弱的形式失敗。django香脆表格文件上傳

#views.py 
@login_required 
def dashboard(request, **kwargs): 
    ''' 
    perform managerial and administrative tasks for a blog. Only 
    available to the blog owner 
    ''' 
    alert_message = "" 
    status = "" 

    blog_slug = kwargs['blog'] 
    blog = get_object_or_404(PersonalBlog, slug=blog_slug) 

    # handle the form submit to update blog data 
    form = BlogEditForm(instance=blog) 
    if request.method == "POST": 
     if blog.owner == request.user: 
      form = BlogEditForm(request.POST, instance=blog) 

      if form.is_valid(): 
       form.save() 

       alert_message = "Your blog data has been updated successfully" 
       status = "saved" 
      else: 
       alert_message = "There was a problem saving the data you entered. Please correct the errors above." 
       status = "error" 
     else: 
      alert_message = "You do not have access to update this blog's information." 
      status = "error" 


    return render(request, "blogcontent/dashboard.html", {'alert_message':alert_message, 
                  'status':status, 'form':form}) 


#forms.py 
class BlogEditForm(ModelForm): 
    description = forms.CharField(widget = forms.Textarea()) 
    twitter = forms.CharField(required=False, help_text="show twitter feed, and allow people to interact with you on twitter") 
    twitter_widget_id = forms.CharField(required=False, help_text="required to show a timeline widget for your twitter account. " + \ 
                "<span class='glyphicon glyphicon-question-sign'></span>") 
    instagram = forms.CharField(required=False, help_text="show instagram feed on your blog page") 
    disqus = forms.CharField(required=False, help_text="allow comments at the bottom of your blog posts") 

    class Meta: 
     model = PersonalBlog 

    def __init__(self, *args, **kwargs): 
     super(BlogEditForm, self).__init__(*args, **kwargs) 
     self.helper = FormHelper() 
     self.helper.layout = Layout(
      Fieldset(
       '<h2 class="text-center">Edit data about your blog</h2>', 
       Field('owner', type="hidden"), 
       Field('title', type="hidden"), 
       Div('description', css_class="col-md-12"), 
       Div('twitter', css_class="col-md-6"), 
       Div('twitter_widget_id', css_class="col-md-6"), 
       Div('instagram', css_class="col-md-6"), 
       Div('disqus', css_class="col-md-6"), 
       Div('logo', css_class="col-md-12"), 
      ), 
      ButtonHolder(
       Submit('submit', 'Update Info', css_class='btn-lg'), 
       css_class="text-center" 
      ), 

     ) 

#dashboard.html 
<form method="post" enctype="multipart/form-data"> 
         {% crispy form %} 
        </form> 

回答

2

啊,我知道這是愚蠢的。我沒有附加request.FILES到form.save()對象。

form = BlogEditForm(request.POST, request.FILES, instance=blog) 
1

你有沒有試圖改變:

<form method="post" enctype="multipart/form-data"> 
    {% crispy form %} 
</form> 

要剛:

{% load crispy_forms_tags %} 
{% crispy form %} 

而且在你的代碼,你的呼籲:

if form.is_valid(): 
    form.save() 

你不想到save()的表格。您想要將表單數據保存到模型實例。所以create()使用表單數據的模型。這也可能是爲什麼。 Forms僅用於保存數據,直到您清除它並使用model將其保存到數據庫。

+0

我只是嘗試脫掉表單標籤,它具有相同的結果,具有相同的生成的HTML。 這個例子實際上只是修改一個實例,當創建模型實例(這不是這個問題)時,有不同的邏輯,它與徽標字段的行爲方式相同。 – awwester 2014-09-02 23:38:28