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

前端之家收集整理的这篇文章主要介绍了jquery – 如何更改所有Django日期字段在ModelForm中的默认窗口小部件?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
给定一组典型模型:
# 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,这是劳动密集型的,容易出现开发人员的错误(即几个models.DateField的通过),在我看来似乎不必要的重复努力。另一方面,我不喜欢修改可以被认为是规范版本的models.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()

class SomeForm(forms.ModelForm)
    formfield_callback = make_custom_datefield

    class Meta:
        # normal modelform stuff here...

猜你在找的jQuery相关文章