我正在为我的项目创建一个表单生成器。它根据数据库中指定的字段动态构建表单。有3个表:表单、表单字段和表单字段值。现在我尝试将数据从表单值绑定到表单字段。它运行良好,例如:
if (field.field_type == 'long_text'):
new_field = forms.CharField(label=field.label, initial = value, required=False, widget=forms.Textarea(attrs={'class': 'form-control'}))
但这不适用于FileField:
new_field = forms.FileField(label=field.label, required = False, initial = initialData)
据我所知,“初始”数据必须采用某种格式:必须是具有url和name属性的对象
我就是这么做的:
try:
''' data is stored in JSON {url:'', name:''} format '''
valueData = json.loads(value)
initialData.initial = valueData['name']
initialData.url = valueData['url']
initialData.name = valueData['url']
except:
pass
new_field = forms.FileField(label=field.label, required = False, initial = initialData)
表单仍然是空的。没有“清除”复选框,没有要单击的url和“未选择文件”
我能做些什么使这个文件输入工作?我需要模拟模型的文件字段吗
有一个类似的问题,答案有点混乱:Django - forms.FileField() initial value
因此,为了让其他人更容易解决类似的问题,我最终提出了以下解决方案:
(……)
所以它基本上创建了一个新类,这个类有
.url
值返回实际文件的路径,还有__str__
值将对象转换为文件名字符串。我使用url和名称分开,因为文件名在保存到服务器时是散列的,然后数据库存储文件的真实名称相关问题 更多 >
编程相关推荐