2014-09-02 4 views
1

У меня возникли проблемы с правильной загрузкой поля изображения с использованием хрустящих форм django. Все остальное на форме и странице отлично работает, но поле изображения не является ошибкой или не сохраняет, оно просто проходит прямо над ним. Я могу добавить изображение через администратора просто отлично, он только терпит неудачу на моей хрустящей форме.django crispy forms file upload

#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

Смежные вопросы