【问题标题】:create Django form class with dynamic number of CharFields创建具有动态数量的 CharFields 的 Django 表单类
【发布时间】:2021-01-29 01:13:18
【问题描述】:

我在创建包含 CharField 列表的动态类表单时遇到问题。 我能够创建一个具有如下动态键值的普通类。但是当我将值更改为 CharFields 时。它不起作用。表格有什么问题?

=========正常class===========

类 DynamicClass(forms.Form):

def __init__ (self, data):
        self.data =data
        for key in self.data.keys():
                self.__setattr__(key, self.data[key])

my_class= DynamicClass({"HOSTNAME": 'Router_Hostname: ', "IP": 'IP_ADDRESS:'})

打印(my_class.HOSTNAME)

输出 --> 路由器主机名:

打印(my_class.IP)

输出--> IP_ADDRESS:

=========表格class===========

类 DynamicForm(forms.Form):

def __init__ (self, data):
        self.data =data
        for key in self.data.keys():
                self.__setattr__(key, forms.CharField(label = self.data[key]))

my_form = DynamicForm ({"HOSTNAME": 'Router_Hostname: ', "IP": 'IP_ADDRESS:'})

打印(my_form.as_table)

错误输出-->

Traceback(最近一次调用最后一次): 文件“”,第 1 行,在 repr 中的文件“~/automation/lib/python3.8/site-packages/django/forms/forms.py”,第 137 行 如果 self._errors 为无: AttributeError:“DynamicForm”对象没有属性“_errors”

【问题讨论】:

    标签: python django forms


    【解决方案1】:

    我解决了 首先,我不应该使用“标签”来设置 CharField() 的初始值。相反,请使用“初始”关键字。 第二,缺少super(DynamicForm, self).__init__(*args, **kwargs)

    终于找到了一个可行的解决方案:

    class DynamicForm(forms.Form):
    def __init__ (self, data,  *args, **kwargs):
        super(DynamicForm, self).__init__(*args, **kwargs)
        self.data = data
        for key in self.data.keys():
            self.fields[key] = forms.CharField(initial = self.data[key])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-05-05
      • 2021-03-12
      • 2014-04-16
      • 2011-07-25
      • 2016-11-11
      • 2012-05-21
      相关资源
      最近更新 更多