给定一组典型模型:
# Application A
from 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()
...
如何更改默认小部件allDateFields 到自定义 MyDateWidget?
我这样问是因为我希望我的应用程序有一个 jQueryUI 日期选择器来输入日期。
我考虑过使用自定义小部件扩展 django.db.models.DateField 的自定义字段。这是实施这种全面变革的最佳方式吗?这样的更改将需要专门将特殊的 MyDateField 导入到每个模型中,这是劳动密集型的,容易出现开发人员错误(即一些模型。DateField 将通过),并且在我看来似乎是不必要的重复工作。另一方面,我不喜欢修改可以被认为是 models.DateField 规范版本的内容。
感谢您的想法和意见。
您可以在您的ModelForm
类,称为formfield_callback
。这应该是一个采用 Django 模型的函数Field
实例作为参数,并返回一个表单Field
实例以形式表示它。
然后你所要做的就是查看传入的 model 字段是否是一个实例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...
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)