如何访问Djangoforms.FileField文件(*not模型.FileField*)?

2024-09-28 21:05:49 发布

您现在位置:Python中文网/ 问答频道 /正文

我在运行django1.7。在

我有以下表格:

class DeckCreateForm(forms.ModelForm):
    csv_file = forms.FileField(required=False)
    class Meta:
        model = Deck
        fields = ['title', 'description']

注意,file字段不是模型的一部分(我希望这样保存)。此文件字段旨在提供构建模型组的另一种方法。在

我想知道如何访问上传的文件。我查了一下我的媒体目录,但它不在那里。我尝试将“upload_to”添加到csv_file构造函数,但得到一个错误:

^{pr2}$

编辑:

我想知道如何使用一个通用的基于类的create视图来使用上面的模型form-in视图.py我有:

class DeckCreateView(CreateView):
    model = Deck
    form_class = DeckCreateForm
    template_name = 'deck_create.html'

具体地说,如何修改http://docs.djangoproject.com/en/1.7/topics/http/file-uploads之类的内容来使用上述基于类的视图。我的网址.py文件:

urlpatterns = patterns(
    ...
    url(r"^deck/create/$", views.DeckCreateView.as_view(), name="deck-create"),
    ...
)

有没有方法可以在DeckCreateView中重写来处理文件上载?在


Tags: 文件csv方法模型form视图modelcreate
1条回答
网友
1楼 · 发布于 2024-09-28 21:05:49

我发现对于新的Django用户来说,有关文件上传的Django文档可能有点难以理解。但是,我认为下面的链接提供了一个非常简洁和易于遵循的一步一步建立文件上传表单的过程。在

Need a minimal Django file upload example

我相信你会在那里找到你需要的一切。在

编辑

作为对OP关于基于类的视图的编辑和评论的回应,我相信它们可以比基于函数的视图更清晰、更“干净”的代码。这里有一个很好的链接,讨论CBV和FBV,其中包括一个简单但有效的CBV示例。在

http://www.datalifebalance.com/2014/04/django-file-uploads-with-class-based-views.html

编辑补遗

为了完整起见,并且为了限制答案对上述外部链接的依赖性(可能有一天会消失),我们添加了一些细节。为了实现他们的目标,OP可以覆盖DeckCreateView的post方法,并保存DeckCreateForm的init_uu,如下所示:

在视图.py公司名称:

...

class DeckCreateView(CreateView):
    ...
    def post(self, request, *args, **kwargs):
        form = self.form_class(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return redirect(self.success_url)
        else:
            return render(request, self.template_name, {'form': form})

在表单.py在

^{pr2}$

表单提交后,请求被发送到DeckCreateView::post。调用DeckCreateForm::save时会发生文件处理。在

相关问题 更多 >