如何更改ModelForm中所有Django日期字段的默认小部件?

给定一组典型模型:

# 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()

...

如何将所有 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

回到顶部