【问题标题】:Django model form not producing expected HTMLDjango 模型表单不产生预期的 HTML
【发布时间】:2011-05-19 10:03:58
【问题描述】:

我有一个模型表单,它不会生成(部分)(应该)代表模型字段的 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>

【问题讨论】:

    标签: python django file forms upload


    【解决方案1】:

    实际上,您的错误在于声明您的模型 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)
    

    【讨论】:

    • 嗯,我明白了。那(有点)发生在我身上,因为我确实使用 models.foo 而不是 forms.foo 写了类似的东西,没有任何问题。然而,Django 文档在处理文件上传时特别使用了 forms.foo,所以这就是我使用的。有趣的。谢谢!
    • @Harv:在文档中,我在模型中找不到 FileUpload 的好例子。在docs.djangoproject.com/en/dev/topics/http/file-uploads 说,他们只给出了一个表单(即生成 html 表单的类)的示例,该表单使用没有模型的 forms.Char/FileField 正确定义了表单中的字段。您创建一个模型(要存储在数据库中的一类信息),然后使用 ModelForm 制作一个表单(使用表单生成表单。*模型中的字段)。模型不应该有表单。*字段在其中,因为这与制作 HTML 表单有关,而不是在数据库中保存信息。
    • 是的,这正是我所指的文档。我想我只是假设您会构建一个表格,目的是在某处存储数据,而文档似乎没有另外说明。我理解您所说的关于模型从不具有表单的内容。感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-07
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-26
    相关资源
    最近更新 更多