这是关于如何更改 ModelForm 中所有 Django 日期字段的默认小部件的后续内容?.
假设您有大量模型(例如 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 无法修复的)。
建议和想法表示赞赏。