首页 > 解决方案 > 将参数传递给 Django Modelform 的 Meta 类

问题描述

我的模型有这样的共同领域:

class Model_1(models.Model):
    field_1 
    field_2
    field_3
    # Other fields
class Model_2(models.Model):
    field_1 
    field_2
    field_3
    # Other fields

然后我想为他们两个创建一个表单,如下所示:

class CommonForm(forms.ModelForm):
    class Meta:
         variable_of_name_of_model = that pass to Meta class
         # this condition check for 
         if  variable_of_name_of_model == 'Model_1':
             model = Model_1
         elif variable_of_name_of_model == 'Model_2':
             model = Model_2
         fields = ['field_1', 'field_2', 'field_3']

在这种形式中,我检查variable_of_name_of_model已传递给Meta班级的内容,然后做一些事情。

我怎样才能做到这一点?另一方面,如何将参数传递给Meta类?

标签: pythondjangodjango-forms

解决方案


您可以使用一种 fabrik 方法:

def get_form_class(model_name,data, instance):
    class CommonForm(forms.ModelForm):
        class Meta:
            model = model_name
            fields = ['field_1', 'field_2', 'field_3']
        form = CommonForm(data=data, instance=instance)
        return form

只需在您想使用它的地方(视图?)使用模型名称来调用它。像这样的东西:

form = get_form_class(model_name=ModelName, data=request.POST, instance=instance,)

推荐阅读