我有点卡住了,我已经使用 Django 一段时间了,但我实际上似乎无法找到这个东西。这很奇怪,因为它应该是一件简单的事情。
我一直在谷歌上搜索,似乎找不到解决方案,这可能是因为它很简单。
问题是,我有一个 ModelForm,它有一个 FileField,当我使用模型的实例渲染此表单,并且该对象包含上传的文件时,我想显示当前文件(就像管理员那样) ,但我似乎不能这样做。
这些技术都不起作用:
{{ form.as_p }}
{{ field.label_tag }}
我一直在管理模板中搜索,但似乎找不到魔力。表单正确呈现对象的所有其他数据
问题 2 是,由于在使用对象实例渲染更改表单时不显示上传的文件,因此当我尝试保存时,表单无法验证,因为它对之前上传的文件一无所知。
那么如何在 Django 中处理更改表单中的文件字段,如何显示当前上传的文件,以及如何验证表单。
你没有仔细观察,解决方案是 contrib/admin/widgets.py 中的一个自定义小部件,即这个:
class AdminFileWidget(forms.FileInput):
"""
A FileField Widget that shows its current value if it has one.
"""
def __init__(self, attrs={}):
super(AdminFileWidget, self).__init__(attrs)
def render(self, name, value, attrs=None):
output = []
if value and hasattr(value, "url"):
output.append('%s <a target="_blank" href="%s">%s</a> <br />%s ' % \
(_('Currently:'), value.url, value, _('Change:')))
output.append(super(AdminFileWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
您可以使用此(或改编版本)小部件元选项 https://docs.djangoproject.com/en/dev/topics/forms/modelforms/#overriding-the-default-fields模型表单。
据我所知,即使没有更好的小部件,您的第二个问题根本不应该存在,请让它知道在使用自定义小部件后它是否仍然存在。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)