繁体   English   中英

如何通过 ModelForm 使用 FileField 添加 Django 模型的新实例?

[英]How to add a new instance of Django model with FileField by ModelForm?

我是 Django 初学者。 我认为我的问题微不足道,但我无法解决。 我有一个名为 Document 的模型,其中包含一个 FileField:

class Document(models.Model):
    file = models.FileField(upload_to="documents")
    created = models.DateTimeField(auto_now_add=True)
    modified = models.DateTimeField(auto_now=True)
    category = models.ForeignKey(DocumentCategory)
    title = models.CharField(max_length=255, unique=True)
    description = models.TextField()

    def __unicode__(self):
        return self.title

我想通过这个 ModelForm 向这个类添加一个新实例:

class DocumentForm(ModelForm):
    class Meta:
        model = Document

在 views.py 我有:

def add_document(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            return HttpResponseRedirect('/')
        else:
            return render_to_response('add_document.html', {'form':form}, context_instance=RequestContext(request))
    else:
        form = DocumentForm()
    return render_to_response('add_document.html', {'form':form}, context_instance=RequestContext(request))

此模板(即 add_document.html):

{% extends "base.html" %}
{{block content %}
<form enctype="multipart/form-data" method="post" action="">{% csrf_token %}
{{form}}
<input type="submit" value="Add document" />
</form>
{% endblock %}

在管理界面中,向数据库添加模型工作正常,添加文件在“upload_to”本地化中。 我的表格不起作用。 当我尝试提交表单时, Filefield error: "This field is required!" 如果模型中没有 FileField,这以前是有效的。 我有 Django 1.2.5 我用它折磨了 3 天,但一无所获。 我很绝望。 对不起我的语言。 请帮忙!

在您的文档模型中,您将文件设置为 upload_t0“文档”,但 upload_to 指向的确切位置。

可能这会有所帮助。

就像现在一样,需要一个文件。 您是否试图在没有文件的情况下保存表格?
如果你想让文件可选,你需要这样定义它:

class Document(models.Model):
    file = models.FileField(upload_to="documents", blank=True, null=True)

作为附加说明,您在表单中的操作参数可能不正确。
它应该是一个 URL; 通常在 Django 中你会想把"." ,但不是完全空的字符串 ( "" )。 也就是说,我不知道这是否是个问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM