基于多个选择字段将FileField呈现为表单中的多个文件输入字段

时间:2017-12-19 06:59:16

标签: django django-models django-forms

我有2个型号,产品和文件。文档具有FK到产品。

class Document(models.Model):
    product = models.ForeignKey(Product, related_name='documents', on_delete=models.CASCADE)
    document = models.FileField(upload_to=file_upload_to)
    type = models.CharField(max_length=255, choices=DOC_TYPE)

文档可以有不同的类型(数据表,白皮书等)。

所以,如果我想在HTML 3输入中看到3种类型的文档,每个输入代表一个类型:

<input name="myFile" type="file">  --> type 1
<input name="myFile" type="file">  --> type 2
<input name="myFile" type="file">  --> type 3
  1. 提交表单后,我想以某种方式知道它是哪种类型的文档,然后修改表单并在代码中选择类型
  2. 我正在考虑使用从File继承的自定义小部件,并在每个输入中添加一个属性,然后在save方法中识别类型

    1. 传递1)如果我想让用户为每种类型添加多个文档,并且每个类型的数字不相等(一个类型可以有3个,另一个类型1,第三个没有),该怎么办?
    2. 用户不会选择类型,他只会根据用户界面上传文件。

      参见下面的示例图片,图标/图像是输入(在完成css之后)

      每个输入代表一个选择。实际上只是一个输入文件字段,但我为每个选项/类型创建3。用户可以通过单击类型/选择图标/图像(设计中)附近的添加(加号)来为每种类型/选择添加任意数量的文件

      enter image description here

1 个答案:

答案 0 :(得分:1)

在创建formset的视图上:

for form in formset:

    form.fields['document'].widget.attrs = {'mytype':'whitepaper'}

然后在POST上捕获属性以检查是否为白皮书。

如果有效,请告诉我