如何更改ModelForm中所有Django日期字段的默认小部件?
给定一组典型模型:
# Application Afrom django.db import models
class TypicalModelA(models.Model):
the_date = models.DateField()
# Application B
from django.db import models
class TypicalModelB(models.Model):
another_date = models.DateField()
...
如何将所有 DateField 的默认窗口小部件更改为自定义MyDateWidget?
我问是因为我希望我的应用程序具有用于输入日期的jQueryUI datepicker。
我考虑过使用自定义窗口小部件扩展django.db.models.DateField的自定义字段。这是实施这种全面变更的最佳方法吗?这样的更改将需要将特殊的MyDateField专门导入每个模型中,这是劳动密集型的,容易发生开发人员错误(例如,一些模型。DateField会通过),在我看来,这似乎是不必要的重复劳动。另一方面,我不喜欢修改可以认为是Model.DateField规范版本的内容。
的想法和意见表示赞赏。
回答:
你可以在ModelForm
类中声明一个名为的属性formfield_callback
。这应该是一个函数,它以Django模型Field
实例为参数,并返回一个表单Field实例以在表单中表示它。
然后,你要做的就是查看传入的模型字段是否是的实例DateField
,如果是,则返回你的自定义字段/小部件。否则,模型字段将具有一个名为的方法formfield
,你可以调用该方法以返回其默认表单字段。
因此,类似:
def make_custom_datefield(f): if isinstance(f, models.DateField):
# return form field with your custom widget here...
else:
return f.formfield(**kwargs)
class SomeForm(forms.ModelForm)
formfield_callback = make_custom_datefield
class Meta:
# normal modelform stuff here...
以上是 如何更改ModelForm中所有Django日期字段的默认小部件? 的全部内容, 来源链接: utcz.com/qa/424159.html