繁体   English   中英

如何在 Django 中初始化元类“模型”变量?

[英]How to initialize Meta class 'model' variable in Django?

这可能是 Django 或一般的 Python 问题。 我有一个 ModelForm。 根据用户输入,我需要使用一种模型或另一种模型。 例如,如果输入是'M',我需要将他的表单与MaleTable 关联起来,否则与FemaleTable 关联。 我可以创建 2 个 ModelForms

class DemographicM (ModelForm):
    class Meta:
        model = MaleTable

class DemographicF (ModelForm):
    class Meta:
        model = FemaleTable

但是,我只想使用一个 ModelForm 并根据输入使用正确的模型对其进行初始化。

我知道 Meta 只是一个内部类。 如何在创建表单时初始化“模型”变量?

我建议保留它们并像这样使用它们

if choice == 'M':
    TableForm = DemographicM
else:
    TableForm = DemographicF

form = TableForm()

对于元类,它的实例是一个类本身。 因此,解决方案是使用函数随时随地创建类。 类似以下内容将起作用:

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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM