Python Django模型表单未生成预期的HTML

Python Django模型表单未生成预期的HTML,python,django,file,forms,upload,Python,Django,File,Forms,Upload,我有一个modelform,它不生成(某些)表示模型字段的HTML。正如您从底部的输出中看到的,它只是输出一个空白行,在那里它应该输出标题,并且可能是文件字段的一个浏览按钮(或者其他什么——对吗?) #views.py def upload_file(request): if request.method == 'POST': form = UploadFileForm(request.POST, request.FILES) else: form

我有一个modelform,它不生成(某些)表示模型字段的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>
#views.py
def上传文件(请求):
如果request.method==“POST”:
表单=上传文件表单(request.POST、request.FILES)
其他:
form=UploadFileForm()
返回render_to_response('files/upload_file.html',{'form':form})
#models.py
来自django导入表单
从django.db导入模型
从django.forms导入ModelForm
类上载文件(models.Model):
title=forms.CharField(最大长度=50)
theFile=forms.FileField()
def ___; unicode(自):
返回str(标题)
类UploadFileForm(ModelForm):
类元:
模型=上传文件
#上传文件.html
{{form}}
#HTML输出

事实上,经过再三考虑,您的错误在于声明了模型上载文件(由于缺少响应而重复检查)。您应该使用models.CharField而不是forms.CharField。因此,您的模型没有任何内容;因此,ModelForm没有任何字段(如果高级用户希望将最终要使用的表单字段附加到模型中,则不会出现错误)。您还需要为文件字段提供一个上传位置,主要是您的媒体目录

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

    def __unicode__(self):
        return str(title)

实际上,仔细想想,您的错误在于声明了您的模型上载文件(由于缺少响应而进行了双重检查)。您应该使用models.CharField而不是forms.CharField。因此,您的模型没有任何内容;因此,ModelForm没有任何字段(如果高级用户希望将最终要使用的表单字段附加到模型中,则不会出现错误)。您还需要为文件字段提供一个上传位置,主要是您的媒体目录

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

    def __unicode__(self):
        return str(title)

嗯,我明白了。这(有点)发生在我身上,因为我确实使用models.foo而不是forms.foo编写了类似的东西,没有任何问题。然而,Django文档在处理文件上传时特别使用forms.foo,所以我使用了它。有趣。谢谢大家!@哈夫:在文档中,我找不到模型中文件上传的好例子。比如,他们只给出了一个表单示例(即,生成html表单的类),使用forms.Char/FileField(不带模型)正确定义表单中的字段。您创建一个模型(存储在数据库中的一类信息),然后使用ModelForm生成一个表单(该表单使用模型中的forms.*字段生成表单)。模型中不应该有表单。*字段,因为这与生成HTML表单有关,而不是将信息保存在数据库中。是的,这正是我所指的文档。我想我只是假设您将构建一个表单,目的是将数据存储在某个地方,而文档似乎没有其他指示。我理解你所说的模型没有形式。谢谢你的帮助!我本来应该读的。嗯,我明白了。这(有点)发生在我身上,因为我确实使用models.foo而不是forms.foo编写了类似的东西,没有任何问题。然而,Django文档在处理文件上传时特别使用forms.foo,所以我使用了它。有趣。谢谢大家!@哈夫:在文档中,我找不到模型中文件上传的好例子。比如,他们只给出了一个表单示例(即,生成html表单的类),使用forms.Char/FileField(不带模型)正确定义表单中的字段。您创建一个模型(存储在数据库中的一类信息),然后使用ModelForm生成一个表单(该表单使用模型中的forms.*字段生成表单)。模型中不应该有表单。*字段,因为这与生成HTML表单有关,而不是将信息保存在数据库中。是的,这正是我所指的文档。我想我只是假设您将构建一个表单,目的是将数据存储在某个地方,而文档似乎没有其他指示。我理解你所说的模型没有形式。谢谢你的帮助!我本来应该读的。