Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Python Django中从表单实例创建表单集_Python_Django_Python 3.x_Django Forms_Formset - Fatal编程技术网

如何在Python Django中从表单实例创建表单集

如何在Python Django中从表单实例创建表单集,python,django,python-3.x,django-forms,formset,Python,Django,Python 3.x,Django Forms,Formset,我试图从表单类的实例中获取Django-Formset 在我的表单类中,我在init方法中添加了一些字段,因为表单必须提供一些灵活性。因此,我不能将该类作为参数传递给formset\u工厂函数 --forms.py 类配置表单(forms.Form): 定义初始化(self、fields、fields\u选项,*args、**kwargs): 超级(配置表单,自我)。\uuuuu初始化(*args,**kwargs) 对于字段中的字段: #从字段数据实例化字段 执行官( f'self.field

我试图从表单类的实例中获取Django-Formset

在我的表单类中,我在init方法中添加了一些字段,因为表单必须提供一些灵活性。因此,我不能将该类作为参数传递给formset\u工厂函数

--forms.py

类配置表单(forms.Form):
定义初始化(self、fields、fields\u选项,*args、**kwargs):
超级(配置表单,自我)。\uuuuu初始化(*args,**kwargs)
对于字段中的字段:
#从字段数据实例化字段
执行官(
f'self.fields[“{field.name}”]='
f'forms.{field.field\u type.field\u type}('
f'required={field.required},'
f'disabled={field.disabled},'
f'label=“{field.label}”,'
f'initial=“{field.value}”,'
f'widget={field.widget},'
f'help_text=“{field.description}”
f')'
)
#如果字段是ChoiceField,则向字段实例添加选项
如果field.field\u type.field\u type中的“ChoiceField”:
self.fields[field.name].choices=[fields\u choices[field.name]]
--views.py

form=forms.ConfigForm(活动字段、字段选项)
表格集=表格集\工厂(表格,额外=1)

但如果我尝试使用ConfigForm实例调用formset_factory,则会发生以下错误:

Internal Server Error: /machines/testconfig/mw0-sap-001/
Traceback (most recent call last):
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\exception.py", line 34, in inner
    response = get_response(request)
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\core\handlers\base.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\base.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\views\generic\base.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "D:\Users\BKU\maximilianwiederer\OneDrive - Deutsche Bahn\Documents\Programmierung\Eclipse\sap4cloud-dev\machines\views.py", line 83, in get
    formset = forms.formset_factory(form, extra=1)
  File "C:\Users\maximilianwiederer\AppData\Local\Programs\Python\Python37\lib\site-packages\django\forms\formsets.py", line 441, in formset_factory
    return type(form.__name__ + 'FormSet', (formset,), attrs)
AttributeError: 'ConfigForm' object has no attribute '__name__'

不能将窗体实例传递到窗体集工厂。它需要一个类,而不是一个实例。但是,您可以向工厂提供一个参数字典,以提供所创建表单的每个实例

下面是我建议您如何编写代码

ConfigFormset=forms.formset\u工厂(forms.ConfigForm)
formset=ConfigFormset(
form_kwargs={
“字段”:活动字段,
“字段\选项”:{}
}
)

无法将表单实例传递到表单集工厂。它需要一个类,而不是一个实例。但是,您可以向工厂提供一个参数字典,以提供所创建表单的每个实例

下面是我建议您如何编写代码

ConfigFormset=forms.formset\u工厂(forms.ConfigForm)
formset=ConfigFormset(
form_kwargs={
“字段”:活动字段,
“字段\选项”:{}
}
)

谢谢,你救了我一天。我编辑了您的代码,因为您忘记了一个步骤(实例化ConfigFormSet,然后从中取出带有表单的表单集),但现在一切正常:谢谢,您救了我一天。我编辑了您的代码,因为您忘记了一个步骤(实例化ConfigFormSet,然后从中取出带有表单的表单集),但现在一切正常:D