2010-12-02 13 views
1

我有一個模型表單,它不會生成(應該)表示模型字段的HTML(某些)。正如你可以從底部的輸出中看到的那樣,它只是輸出一個空白行,它應該輸出標題,大概是一個瀏覽按鈕(或者是 - 對嗎?)。Django模型表單不能生成預期的HTML

#views.py 
def upload_file(request): 
    if request.method == 'POST': 
     form = UploadFileForm(request.POST, request.FILES) 
    else: 
     form = UploadFileForm() 
    return render_to_response('files/upload_file.html', { 'form': form }) 

#models.py 
from django import forms 
from django.db import models 
from django.forms import ModelForm 

class UploadFile(models.Model): 
    title = forms.CharField(max_length = 50) 
    theFile = forms.FileField() 

    def __unicode__(self): 
     return str(title) 

class UploadFileForm(ModelForm): 
    class Meta: 
     model = UploadFile 

#upload_file.html 
<form action="" method="POST" enctype="multipart/form-data"> 
    {{ form }} 
    <input type="submit" value="Upload File"> 
</form> 

#The HTML output 
<form action="" method="POST" enctype="multipart/form-data"> 

    <input type="submit" value="Upload File"> 
</form> 

回答

5

其實第二個想法是你的錯誤是在聲明你的模型UploadFile(在缺少響應的情況下進行雙重檢查之後)。你應該使用models.CharField不forms.CharField。因此你的模型沒有任何內容。因此ModelForm沒有任何字段(它不會作爲錯誤出現,以防某些高級用戶想要將最終想要使用的表單字段附加到模型中)。您還需要爲FileField提供一個upload_to位置,主要是您的媒體目錄。

class UploadFile(models.Model): 
    title = models.CharField(max_length = 50) 
    theFile = models.FileField(upload_to="files/") 

    def __unicode__(self): 
     return str(title) 
+0

嗯我明白了。這種(有點)發生在我身上,因爲我使用models.foo寫了類似的東西,而不是forms.foo,沒有問題。但是,在處理文件上傳時,Django文檔特別使用forms.foo,所以這就是我使用的。有趣。謝謝! – Harv 2010-12-03 03:01:56