2011-03-19 95 views
4

我是Django初學者。我認爲我的問題微不足道,但我無法解決它。 我有一個名爲文檔模型與一個FileField字段:ModelForm如何通過FileField添加django模型的新實例?

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 %} 

在Admin Interface添加模型到數據庫正常工作並添加文件處於「upload_to」本地化中。我的表單不起作用。當我嘗試提交表單時,我得到表單filefield錯誤:「此字段是必需的!」在模型中沒有FileField之前,它可以工作。 我有Django 1.2.5 我用它折磨了3天而沒有任何東西!我很絕望。對不起,我的語言。請幫忙!

+1

這很奇怪。除了奇怪的縮進之外,找不到任何問題 – 2011-03-19 14:51:12

+0

嘗試放入一個'import pdb; pdb.set_trace()'在測試POST方法後立即執行。然後檢查請求對象和request.FILES以獲取線索。祝你好運。 – 2011-03-19 15:22:21

+0

將{{form}}默認爲{{form.as_p}}'嗎? – 2011-03-19 15:24:57

回答

0

就像現在一樣,需要一個文件。你是否試圖保存沒有文件的表單?
如果你想使文件可選的,你需要以這種方式來定義它:

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

作爲一個附加的註釋,你在表單中有動作參數可能不正確。
它應該是一個URL;通常在Django中,你會想要把".",但不是一個完全空的字符串("")。這就是說,我不知道這可能是一個問題。