这可能是Django或一般的python问题。我有一个ModelForm。根据用户输入,我需要使用一个模型或另一个模型。例如,如果输入为'M',我需要将他的表单与MaleTable相关联,否则将其与FemaleTable相关联。我可以创建2个ModelForms
class DemographicM (ModelForm):
class Meta:
model = MaleTable
class DemographicF (ModelForm):
class Meta:
model = FemaleTable
但是,我想只使用一个ModelForm并根据输入使用正确的模型对其进行初始化。
我知道Meta只是一个内部阶级。如何在创建表单时初始化'model'变量?
答案 0 :(得分:0)
我建议保留它们并在视图中使用它们
if choice == 'M':
TableForm = DemographicM
else:
TableForm = DemographicF
form = TableForm()
答案 1 :(得分:0)
对于一个元类,它的实例是一个类本身。因此,解决方案是使用函数随时创建类。像下面这样的东西会起作用:
MODEL = None
def define_meta_attributes(model):
global MODEL
MODEL = model
def make_form_class(*args, **kwargs):
class Demographic (ModelForm):
class Meta:
model = MODEL
return Demographic(*args, **kwargs)
现在,您要做的就是首先使用所需的模型调用define_meta_attributes,然后再调用make_form_class,如下所示:
define_meta_attributes(MaleTable)
MaleTableForm = make_form_class()