Django:如何将字符串转换为表单?

时间:2017-02-09 16:02:38

标签: python django

如何将字符串转换为Form?

在模型中你可以使用这一行。

model = apps.get_model(app_label='app_label', model_name='str_model')

我有3种形式:

  • Fund_customer
  • Fund_employee
  • Fund_supplier

并希望这样做。

type = "customer"
form = "Fund_"+type #that would make "Fund_customer"
form = apps.get_form(form) #I wonder if there's a function like this.

我只是不想 if 条件来实现此目的。

1 个答案:

答案 0 :(得分:3)

Django没有类似于模型的表单类注册表。

最简单的解决方案是使用名称

键入的表单创建字典
forms = {
    'customer': Fund_customer,
    'employee': Fund_employee,
    'supplier': Fund_supplier,
}

然后进行字典查找以获取表单类。

form_class = forms[form_type]

您需要记住在添加新表单时更新字典,但此解决方案的优点是它比创建表单类的注册表简单得多。

如果所有表单都在相同的forms.py模块中,您可以尝试定义使用getattr的函数。

from myapp import forms

def get_form_class(form_type):
    class_name = 'Fund_%s' % form_type
    # third argument means it returns None by default instead of raising AttributeError
    return getattr(forms, class_name, None)