2010-12-02 45 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