【发布时间】:2010-10-14 10:50:14
【问题描述】:
这是How do you change the default widget for all Django date fields in a ModelForm?的后续报道。
假设您有大量模型(例如 A-ZZZ)随着您无法控制的其他开发人员的输入而增长,并且您想要更改所有日期字段的输入方式(即通过使用 jQueryUI )。确保使用该新小部件填写所有日期字段的最佳方法是什么?
引用问题的一个建议是:
def make_custom_datefield(f):
if isinstance(f, models.DateField):
# return form field with your custom widget here...
else:
return f.formfield()
class SomeForm(forms.ModelForm):
formfield_callback = make_custom_datefield
class Meta:
# normal modelform stuff here...
但是,如果您没有明确的 ModelForm,但 url 模式直接来自模型,是否可以这样做?即你的 url 配置是这样的:
url(r'^A/?$', 'list_detail.object_list', SomeModelA)
其中 SomeModelA 是由 Django 在后台转换为 ModelForm 的模型(不是表单)。
目前在我的系统中,每个模型都没有表格。显式创建表单的唯一要点是添加先前解决方案中建议的 formfield_callback,但这违反了 DRY 原则,并且容易出错且劳动强度大。
我考虑过(如上一个帖子中所建议的那样)创建我自己的具有特殊小部件的字段并使用它而不是内置的。它不是很费力,但可能会出错(不过没有什么是好的 grep 无法修复的)。
感谢您的建议和想法。
【问题讨论】:
标签: django django-forms widget django-widget