Python Django模型元

Python Django模型元,python,django,Python,Django,我想要创建一个ModelForm类,其中model是从视图传递的参数。(我想要一个动态表单,这样我就可以通过更改Meta中的模型值来使用同一个类ObjectForm创建所有表单): 发生错误,并说明model_name不是全局字段。 请帮我解决这个问题。您的问题是类(和元类)是在编译时处理的,而不是在实例化ObjectForm时处理的。在编译时,模型名称未知。动态创建类是可能的,但要复杂一些。幸运的是,django开发人员为您完成了艰苦的工作: >>> from django.

我想要创建一个ModelForm类,其中model是从视图传递的参数。(我想要一个动态表单,这样我就可以通过更改Meta中的模型值来使用同一个类ObjectForm创建所有表单):

发生错误,并说明model_name不是全局字段。
请帮我解决这个问题。

您的问题是类(和元类)是在编译时处理的,而不是在实例化ObjectForm时处理的。在编译时,模型名称未知。动态创建类是可能的,但要复杂一些。幸运的是,django开发人员为您完成了艰苦的工作:

>>> from django.forms.models import modelform_factory
>>> modelform_factory(MyModel)
<class 'django.forms.models.MyModelForm'>

好的,您的基本错误是,您正在将
model\u name
作为局部变量访问,而不是作为模型实例访问。这是相当基本的Python

但即使你修复了这个,它仍然不起作用。元类是在定义时由元类的形式计算的,而不是在运行时。您需要调用
forms.models.modelform\u factory
——如果您想定义一些标准验证和/或字段,您可以将modelform子类传递给工厂

form_class = modelform_factory(MyModel, form=MyModelForm)
返回值为表单(类)
def my_view(request):
    # ...
    MyForm = modelform_factory(MyModel)
    form = MyForm(request.POST) #  or however you would use a 'regular' form
form_class = modelform_factory(MyModel, form=MyModelForm)