当前位置: 首页 > 面试题库 >

动态将字段添加到表单

彭硕
2023-03-14
问题内容

我的表格中有3个字段。我有一个提交按钮和一个“添加其他字段”按钮。我知道我可以使用__init__表单类中的方法添加字段。

我是Python和Django的新手,并且陷入了一个初学者的问题;我的问题是:

当我单击“添加其他字段”按钮时,添加其他字段的过程是什么?

是否需要再次呈现表单?

我如何以及何时打电话__init__,甚至必须打电话?

如何将参数传递给__init__


问题答案:

你的表单必须基于从POST传递给它的一些变量来构造(或盲目检查属性)。每次重新加载视图时(无论是否加载)都会构造表单本身,因此HTML需要包含有关构造正确数量的字段以进行验证的字段数量的信息。

我将以FormSet工作方式看待这个问题:存在一个隐藏字段,其中包含活动表单的数量,每个表单名称前都带有表单索引。

实际上,你可以将一个字段 FormSet

https://docs.djangoproject.com/en/dev/topics/forms/formsets/#formsets

如果你不想使用a FormSet,则可以随时自行创建此行为。

这是从头开始制作的-它应该给你一些想法。它还回答了有关将参数传递给的问题__init__-你只需将参数传递给对象构造函数即可:MyForm('arg1', 'arg2', kwarg1='keyword arg')

Forms

class MyForm(forms.Form):
    original_field = forms.CharField()
    extra_field_count = forms.CharField(widget=forms.HiddenInput())

    def __init__(self, *args, **kwargs):
        extra_fields = kwargs.pop('extra', 0)

        super(MyForm, self).__init__(*args, **kwargs)
        self.fields['extra_field_count'].initial = extra_fields

        for index in range(int(extra_fields)):
            # generate extra fields in the number specified via extra_fields
            self.fields['extra_field_{index}'.format(index=index)] = \
                forms.CharField()

View

def myview(request):
    if request.method == 'POST':
        form = MyForm(request.POST, extra=request.POST.get('extra_field_count'))
        if form.is_valid():
            print "valid!"
    else:
        form = MyForm()
    return render(request, "template", { 'form': form })

HTML

<form>
    <div id="forms">
        {{ form.as_p }}
    </div>
    <button id="add-another">add another</button>
    <input type="submit" />
</form>

JS

<script>
let form_count = Number($("[name=extra_field_count]").val());
// get extra form count so we know what index to use for the next item.

$("#add-another").click(function() {
    form_count ++;

    let element = $('<input type="text"/>');
    element.attr('name', 'extra_field_' + form_count);
    $("#forms").append(element);
    // build element and append it to our forms container

    $("[name=extra_field_count]").val(form_count);
    // increment form count so our view knows to populate 
    // that many fields for validation
})
</script>


 类似资料:
  • 问题内容: 有没有办法可以从python发送表单的(css)类?例如: 这呈现了一个简单的文本字段,但是我希望该文本字段具有的CSS类,是否可以直接从python进行? 我知道我可以直接从python 放一个,但不能放一个类。 更新:我尝试了,但没有成功,我得到了: 问题答案: WTForms不允许你在字段初始化中设置显示选项(例如类名)。但是,有几种方法可以解决此问题: 如果你所有的字段都应包含

  • 我使用以下方法在easytable(easytable)中创建我的表头 然后,绘制表格: 表格标题绘制正确,但。。动态添加行的方法是什么?我必须画一张新桌子吗?我可以向已经创建的表中添加行吗? 谢谢

  • 我读过许多关于动态添加字段集的博客和帖子,但它们都给出了非常复杂的答案。我要求的不是那么复杂。 我的HTML代码: 因此,用户将在字段中输入一个整数值(我正在使用javascript检查验证)。点击链接,会出现相应数量的输入字段供他输入。我想用javascript实现这一点。 我不是javascript方面的专家。我在想如何通过链接检索用户在字段中填写的整数,并显示相应数量的输入字段。

  • 在VAADIN组件中,用户可以选择插入一到N个问题答案。 初始:第一个答案应有一个文本字段,带有按钮(“添加另一个答案”) 按下按钮时,应为第二个答案添加一个新的文本字段,以此类推。。。 我的问题是,如何在按钮按下时实现新文本字段的动态加载? 我添加了一张我如何想象这个问题的图片。

  • 本文向大家介绍silverstripe 将字段添加到DataObject,包括了silverstripe 将字段添加到DataObject的使用技巧和注意事项,需要的朋友参考一下 示例 您可以使用该DataExtension机制将额外的数据库字段添加到现有的DataObject中: 并应用扩展名: 这将HairColour作为字段添加到Member对象。

  • 问题内容: 我有一个使用插件体系结构的Java Web应用程序。我想知道是否有人可以通过Web应用程序运行时通过Serlvet映射到servletconfig来添加servlet的解决方案?这样的想法是,可以将一个类添加到/ WEB-INF / classes文件夹中,并使其成为Servlet,而无需重新启动Web应用程序。同样,如果用户选择删除“插件”,则让代码从servletconfig中删除