【问题标题】:How to initialize Meta class 'model' variable in Django?如何在 Django 中初始化 Meta 类“模型”变量?
【发布时间】:2018-11-19 22:47:58
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python django django-models django-forms


    【解决方案1】:

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

    if choice == 'M':
        TableForm = DemographicM
    else:
        TableForm = DemographicF
    
    form = TableForm()
    

    【讨论】:

    • 我试图看看是否可以避免创建这两种形式,因为唯一的区别(他的形式之间)是模型
    【解决方案2】:

    对于元类,它的实例就是一个类本身。因此,解决方案是使用函数随时随地创建类。像下面这样的东西会起作用:

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

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 2022-01-13
      • 2020-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-10-14
      • 2013-06-27
      • 2017-06-27
      相关资源
      最近更新 更多