sha*_*jan 2 python forms oop django inheritance
所以,我正在写一些东西,我遇到了如何做到这一点的障碍(以及正确的做事方式).所以,解释这种情况将有助于更好地理解问题,并希望有人会知道答案:)在这里:
基本上,我在Python中编写了一些动态表单(更具体地说是Django) - 我正在使用表单工厂来生成我想要的表单.这很好,花花公子,到目前为止,我一直在以硬编码的方式定义表单的属性,基本上将属性与某个表单(ChoiceField,布尔值等)匹配.但是,我希望而不是硬编码这些值本质上是根据我传递的信息动态创建属性字典...
我基本上有一个"选项"数组,所以这里是我正在考虑的两种方法:
Run Code Online (Sandbox Code Playgroud)def get_property(): if value = "artifact": #artifact being one option return form.BooleanField(label="blah") else if value = "environment": #environment being another type of option return form.ChoicesField(label="blah") etc...
Run Code Online (Sandbox Code Playgroud)class Base_Property(): value = "" def __init__(self, option): value = form.BooleanField() class Artifact_Property(Base_Property): def __init__(self, option): Base_Property.__init__(self, option) value = form.ChoiceField(choices=some_choices_array())
如果选项二是要走的路,有人可以解释我如何根据变量动态创建对象吗?比如,匹配值的名称(例如,Artifact,以匹配Artifact_Property).
非常感谢你的帮助!我真的很有兴趣看到恰当的方式 - 也许它会激起争论:)
-Shawn
你考虑过用字典吗?他们非常适合这种条件.
def get_option(field_type):
options = {
'artifact': forms.BooleanField,
'environment': forms.Choice Field,
}
return options[field_type](label='blah')
Run Code Online (Sandbox Code Playgroud)