将参数传递给django中的动态表单

use*_*736 20 python django django-forms

我在表格中有动态表格.当我实例化表单时,如何从我的视图中传递参数?

就像是:

form = DynamicForm("some string argument I'm passing to my form")
Run Code Online (Sandbox Code Playgroud)

这是我的形式:

class DynamicForm(Form):
def __init__(self, *args, **kwargs):
    super(DynamicForm, self).__init__(*args, **kwargs)
    for item in range(5):
        self.fields['test_field_%d' % item] = CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

gru*_*czy 47

将其添加为关键字参数,假设它名为my_arg.pop()在调用之前确保关键字arg super(),因为父类的init方法不接受额外的关键字参数.

class DynamicForm(Form):
  def __init__(self, *args, **kwargs):
    my_arg = kwargs.pop('my_arg')
    super(DynamicForm, self).__init__(*args, **kwargs)
    for item in range(5):
        self.fields['test_field_%d' % item] = CharField(max_length=255)
Run Code Online (Sandbox Code Playgroud)

当你创建表单时,它是这样的:

form = DynamicForm(..., my_arg='value')
Run Code Online (Sandbox Code Playgroud)

  • 只是为了说明,当学习`**kwargs`时...我总是得到错误:`__init __()得到了一个意想不到的关键字参数'my_arg'.你必须在你的构造函数的第一行".pop"你的参数,或者至少这有助于我解决我的问题. (9认同)
  • @krizajB实际上,你必须在super()之前使用kwargs.pop,否则基类将接收它不支持的参数.但它不一定是*第一行*. (7认同)