【问题标题】:image upload and CreateView based view图片上传和基于 CreateView 的视图
【发布时间】:2012-06-03 13:19:42
【问题描述】:

我希望能够使用 CreateView 和 ModelForm 上传图像文件,但我无法让它工作 - 在选择文件后表单似乎没有绑定任何文件数据。这是视图的当前内容:

class AddContentForm(forms.ModelForm):
    class Meta:
        model = Media


class AddContentView(CreateView):
    template_name = 'simple_admin/add_content.html'
    form_class = AddContentForm

    def get_success_url(self):
        return u'/opettajat/subcategory/{0}/{1}/'.format(self.kwargs['subcat_name'].decode('utf-8'), self.kwargs['subcat_id'].decode('utf-8'))


    def form_valid(self, form):
        isvalid = super(AddContentView, self).form_valid(form)
        s = Subcategory.objects.get(pk=self.kwargs['subcat_id'].encode('utf-8'))
        if self.request.POST.get('image'):
            image = form.cleaned_data['image']
            title = form.cleaned_data['art_title'].encode('utf-8')
            year_of_creation = form.cleaned_data['year_of_creation']
            m = Media.objects.get_or_create(image=image, art_title=title, year_of_creation=year_of_creation)[0]
            s.media.add(m)
            s.save()
       return isvalid

    def get_context_data(self, **kwargs):
        context = super(AddContentView, self).get_context_data(**kwargs)
        context['subcategory_name'] = self.kwargs['subcat_name'].encode('utf-8')
        context['subcategory_id'] = self.kwargs['subcat_id'].encode('utf-8')
        return context

     @method_decorator(login_required)
     def dispatch(self, request, *args, **kwargs):
        return super(AddContentView, self).dispatch(request, *args, **kwargs)

有人可以帮忙吗?一个基于类的图像上传视图的简单示例将不胜感激。

【问题讨论】:

    标签: django image-upload django-class-based-views


    【解决方案1】:

    上传的文件存储在request.FILES,而不是request.POST。并且不要忘记将enctype="multipart/form-data" 添加到您的<form> 标签中。

    我认为form_valid 方法是用于验证,而不是用于保存数据,不是吗?

    【讨论】:

    • 我的
      中有 enctype="multipart/form-data" (刚才用谷歌搜索了那个)但是谢谢你的提醒 :) self.request.POST.get ('image') 仅检查是否使用了表单图像字段。最大的问题是 self.request.FILES 在提交表单时不包含任何内容,所以我根本无法对它做任何事情。
    • @boromil 文件是否发送到服务器? (用 FireBug 检查)
    • 啊抱歉 - 没有注意到关于 firebug 的部分 - 在 firebug 中我可以在哪里找到有关发送文件的信息 - 我不熟悉它。 <form enctype="multipart/form-data" action="/opettajat/add/content/{{ subcategory_name }}/{{ subcategory_id }}/" method="post" style="float: none;">{% csrf_token %} {{ form.as_django_admin }} <input type="submit" value="Add Content"/> </form>
    • @boromil 在“网络”选项卡上,您可以检查您的帖子请求的标题。如果文件未发送,则您的表单的 html 布局有问题。
    • 你是对的 - 模板文件中的一个错误 - 它现在可以正确上传 - 现在我只需要修复一些其他的东西。谢谢你的帮助:)
    猜你喜欢
    • 1970-01-01
    • 2014-01-22
    • 2021-07-12
    • 2010-12-10
    • 1970-01-01
    • 1970-01-01
    • 2018-03-04
    • 2017-12-20
    • 2015-07-26
    相关资源
    最近更新 更多