【发布时间】:2011-01-23 11:31:44
【问题描述】:
我有 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 类,这样当用户看到表单时,我可以省略该模型中的一个字段。
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 类的存在,但是如果我希望它也是动态的呢?类似于检查是否存在:modelname + 'Form'。我不确定如何动态地将用户发送到预定义的表单(如果存在)。
有什么建议吗?有没有更好的方法来看待这个问题?
【问题讨论】:
-
我很难从您的描述中全面了解您要完成的工作。您是否愿意将相关位粘贴到某个粘贴箱中,以便我们查看您目前拥有的内容?
-
抱歉,请看修改后的问题
标签: django django-forms django-generic-views