6

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)

誰か助けてもらえますか?クラスベースの画像アップロードビューの簡単な例をいただければ幸いです。

4

1 に答える 1

19

アップロードされたファイルはrequest.FILESではなく に保存されますrequest.POST。タグに追加enctype="multipart/form-data"することを忘れないでください。<form>

そしてform_valid、メソッドは検証用であり、データ保存用ではありませんね。

于 2012-05-29T10:50:43.463 に答える