【发布时间】:2014-10-24 12:38:10
【问题描述】:
在我的应用程序中,我需要使用大量频繁更改的遗留数据库,这意味着我使用的视图和模板必须能够处理很多不同的情况。在这些旧表中的每一个中都有一些标准化的字段。我使用this 多列字段实现将它们包装到一个字段中,因为稍后我想为它们分配一些特殊行为。效果很好,表单会自动显示 MultiColumnField 中包含的所有字段及其默认小部件。保存到数据库也可以。
但现在我想将这些字段的默认小部件更改为不同的东西,我真的不知道在哪里分配它们。
我尝试使用 MultiWidgets,但这似乎并没有达到我想要的效果。然后我尝试在管理表单的通用视图中设置form_class:
class ThemeCreateView(CreateView):
def __init__(self, model=None, template_name = None, success_url = None):
self.model = model
self.template_name = template_name
self.success_url = success_url
self.form_class = modelform_factory(self.model, widgets=
{'st_name': CustomWidget(),
'st_key': CustomWidget(),
'st_meta': CustomWidget(),
super(ThemeCreateView, self).__init__()
我必须在__init__ 中分配所有内容,因为我不知道哪个模型会调用视图。该视图在 urls.py 中使用 .as_view() 调用。
问题是,我在这里分配的小部件被忽略了,表单仍然显示默认小部件。我想他们稍后会重置为默认值?我必须覆盖其他地方吗?
我读到我可以使用模板将其更改为另一个小部件(至少如果我想使用 HiddenInput-Widget),但模板也不知道哪些模型会击中它们,所以我认为可以'除了{{forms.as_p}}
知道在视图中的什么位置/我可以在哪里设置小部件吗?也许直接在MultiColumnField?对其中的字段进行硬编码不会有问题,因为我只在这种特殊情况下使用该字段,但我不知道从哪里开始。
如果还有什么不清楚的地方,欢迎提问。
【问题讨论】:
标签: python django django-templates django-views django-models