使用type()方法创建具有django内部Meta类的类

时间:2012-12-06 13:13:22

标签: python django

我正在处理函数(在Django 1.4,python 2.7.2+中),它为指定的Model生成Form并返回它。 我在使用带有3个参数的type()方法时遇到了麻烦,因为我想指定Form的内部Meta类。 Django文档提供了一个自动生成的Form for Model的示例:

class PartialAuthorForm
    m(ModelForm):
        class Meta:
            model = Author

现在我想概括它并自动创建表单。所以我想在返回的Form中指定Meta,并在其中定义“model = model_cls”。

from django.forms import ModelForm
def generate_form_for(model_cls):
    ret_cls = type(model_cls.__name__ + "Form", (ModelForm,), {???})

我不知道“???”应该换成。你呢?

2 个答案:

答案 0 :(得分:2)

我通过做这样的事情解决了这个问题:

Meta = type('Meta', (), {                                                   
    'model': ExampleModel,                                                                                                           
})                                                                                                                                                           

ExampleForm = type('ExampleForm', (), {                                                                             
    'Meta': Meta,                                                                                                              
})

答案 1 :(得分:0)

检查Django modelform_factory的工作原理:

https://github.com/django/django/blob/master/django/forms/models.py#L372

Meta是类属性。