Django形式的输入数量可能可变吗?

发布于 2021-01-29 15:18:48

是否可以使用Django表单使用可变数量的字段?

具体的应用是这样的:

用户可以在图像上传表单上上传任意数量的图片。图片上传后,将带到页面上,在页面上可以给图片起一个名称和描述。图片的数量将取决于用户选择上传的数量。

那么, 如何让django使用可变数量的输入字段来生成表单 (必要时可以将其作为参数传递)?

编辑: 自写杰夫·鲍尔的答案中提到文章以来,有些事情已经改变。

即这行代码似乎不起作用:

# BAD CODE DO NOT USE!!!
return type('ContactForm', [forms.BaseForm], { 'base_fields': fields })

这就是我想出的…

我使用的答案:

from tagging.forms import TagField
from django import forms

def make_tagPhotos_form(photoIdList):
    "Expects a LIST of photo objects (ie. photo_sharing.models.photo)"

    fields = {}

    for id in photoIdList:
        id = str(id)

        fields[id+'_name'] = forms.CharField()
        fields[id+'_tags'] = TagField()
        fields[id+'_description'] = forms.CharField(widget=forms.Textarea)

    return type('tagPhotos', (forms.BaseForm,), { 'base_fields': fields })

note标记不是django的一部分,但它是免费的并且非常有用。检查一下:django-
tagging

关注者
0
被浏览
41
1 个回答
  • 面试哥
    面试哥 2021-01-29
    为面试而生,有面试问题,就找面试哥。

    是的,可以在Django中动态创建表单。您甚至可以将动态字段与普通字段混合和匹配。

    class EligibilityForm(forms.Form):
        def __init__(self, *args, **kwargs):
            super(EligibilityForm, self).__init__(*args, **kwargs)
            # dynamic fields here ...
            self.fields['plan_id'] = CharField()
        # normal fields here ...
        date_requested = DateField()
    

    有关此技术的详细说明,请参阅James Bennett的文章: 因此,您需要动态表单吗?

    http://www.b-list.org/weblog/2008/nov/09/dynamic-
    forms/



知识点
面圈网VIP题库

面圈网VIP题库全新上线,海量真题题库资源。 90大类考试,超10万份考试真题开放下载啦

去下载看看