如何通过 ModelForm 使用 FileField 添加新的 Django 模型实例?
Posted
技术标签:
【中文标题】如何通过 ModelForm 使用 FileField 添加新的 Django 模型实例?【英文标题】:How to add a new instance of Django model with FileField by ModelForm? 【发布时间】:2011-07-18 18:26:42 【问题描述】:我是 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天,一无所获!我很绝望。对不起我的语言。请帮忙!
【问题讨论】:
这很奇怪。除了奇怪的缩进找不到任何问题 尝试在您的 POST 方法测试之后立即输入import pdb; pdb.set_trace()
。然后检查请求对象和 request.FILES 以获取线索。祝你好运。
form
是否默认为 form.as_p
?
【参考方案1】:
现在,需要一个文件。您是否要在没有文件的情况下保存表单? 如果你想让文件可选,你需要这样定义它:
class Document(models.Model):
file = models.FileField(upload_to="documents", blank=True, null=True)
作为附加说明,您在表单中的操作参数可能不正确。
它应该是一个 URL;通常在 Django 中你会想要输入"."
,但不是一个完全空的字符串 (""
)。也就是说,我不知道这是否是个问题。
【讨论】:
【参考方案2】:在您的文档模型中,您将文件设置为 upload_t0 “文档”,但 upload_to 指向的确切位置。
May be this will help.
【讨论】:
以上是关于如何通过 ModelForm 使用 FileField 添加新的 Django 模型实例?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 ModelForm 中使用 forms.ChoiceField()?
Django Imagefield 无法通过 ModelForm 正常工作