それぞれにさまざまなフィールドを持つ 3 つのモデルがあります。2 つのモデルについては、(Django の create_object を介して) 一般的なフォームを使用してデータを要求することに問題はありません。モデル名を受け取り、ユーザーを一般的なフォームに送る関数を書きました
url(r'^add_(?P<modelname>\w+)/$', generic_add),
def generic_add(request, modelname):
mdlnm_model = models.get_model('catalog',modelname)
return create_object(request,
model = mdlnm_model,
template_name = 'create.html',
post_save_redirect = '/library/',
extra_context = {'func': 'Create ' + modelname},
login_required = 'True'
)
3 番目のモデルでは、ModelForm クラスを定義して、ユーザーがフォームを見たときにこのモデルのフィールドの 1 つを省略できるようにします。
url(r'^create_actor/$', create_object, Actor_Input, name='db_actor_create'),
Actor_Input = {
'form_class': ActorForm,
'template_name': 'create.html',
'post_save_redirect': '/library/',
'extra_context': {'func': 'Create Actor'},
'login_required': 'True'
}
class ActorForm(forms.ModelForm):
class Meta:
model = Actor
fields = ('name','age','height','short_description',
'long_description')
Django が定義済みの ModelForm が存在する場合は表示するが、定義済みのフォームが作成されていない場合は完全に一般的なフォームを表示する方法はありますか? もっと多くのモデルを作成する予定であり、Actor のように分割する必要があるすべてのモデルの URL を作成したくありません。
別の言い方をすれば、generic_add 関数を変更して ActorForm (存在する場合) を使用し、それ以外の場合は汎用の ModelForm を使用するようにします。ActorForm クラスの存在を確認する方法はわかっていますが、それも動的にしたい場合はどうすればよいでしょうか? モデル名 + 'フォーム' が存在するかどうかを確認するようなもの。事前定義されたフォームが存在する場合、そのフォームにユーザーを動的に送信する方法がわかりません。
助言がありますか?この問題を見るより良い方法はありますか?