2

指定されたモデルのフォームを生成して返す関数(Django 1.4、python 2.7.2+)に取り組んでいます。Formの内部メタクラスを指定したいので、3つの引数でtype()メソッドを使用するのに問題があります。Djangoのドキュメントには、モデル用に自動生成されたフォームの例が示されています。

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

今、私はそれを一般化し、自動的にフォームを作成したいと思います。したがって、返されたフォーム内でMetaを指定し、その中に属性 "model=model_cls"を指定します。

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

何が「???」かわからない に置き換える必要があります。あなたは?

4

2 に答える 2

2

私は次のようなことでこれを解決しました:

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

ExampleForm = type('ExampleForm', (), {                                                                             
    'Meta': Meta,                                                                                                              
})
于 2012-12-06T13:28:13.293 に答える
0

Djangoがどのように機能するかを確認しますmodelform_factory

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

Metaクラス属性です。

于 2012-12-06T14:51:59.140 に答える