当前位置: 首页 > 面试题库 >

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

班浩皛
2023-03-14
问题内容

给定一组典型模型:

# 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...


 类似资料:
  • 问题内容: 我在数据库中有ISO 8601格式的日期%。但是,当日期传递到模板时,它显示为。 有没有一种方法可以将格式调整为我想要的格式? 问题答案: date settings.DATE_FORMAT

  • 我正在尝试在Opportunity更改Stage Standard对象的默认值 我采取的步骤: 使用规则条件创建工作流规则机会:创建日期不等于null 评估标准在创建记录时评估规则。 将操作添加为字段更新,并为拾取列表选择值 激活规则 但是没有发生任何事情,因为默认值仍然是-NONE- 我错过了什么?作为salesforce新手,我也不想使用扳机或按钮。

  • 问题内容: 我有一个JRE,那是我安装Eclipse时唯一的一个。随后,我在其中安装了完整的JDK 并将其环境变量更改为该变量。但是,每次我启动一个新的Eclipse工作区时,它只会拾取旧的JRE,我必须手动将其删除并添加新的JRE。 如何将Eclipse安装绑定到新的JDK,以便每个新的工作区都仅指向该文件夹?我检查了一下,但是那里没有提到要使用的JRE。 更新: 我进入s,添加了新位置,将其标

  • 问题内容: 我想做的是显示一个单一的表格,让用户: 输入文档标题(来自模型) 从下拉列表中选择一个选项(由模型填充) 输入(存储在模型中) 我不确定如何在表单中显示外键关系的字段。我知道在视图中你可以使用document.code_set(例如)访问当前document对象的相关对象,但是我不确定如何将其应用于ModelForm。 我的模特: 我的模型表格 问题答案: 关于以表格形式显示外键字段,

  • 问题内容: 无论如何,是否可以在WCF中更改DateTime的默认JSON序列化/反序列化? 目前,DateTime已序列化为该格式,应该没问题,但是当我的服务器不在UTC中时(我无法更改),我遇到了问题。 此服务正在处理的所有日期/时间数据均为UTC格式。服务器处于UTC时一切正常。但是,暂存/生产环境设置为GMT + 1(Paris),并且序列化程序假定日期/时间在GMT + 1中,而完全忽略

  • 问题内容: 有没有办法在Swing GTK LaF中更改默认字体大小? GTK LaF似乎假定为72dpi,因此所有字体仅是使用96dpi屏幕时应具有的大小的3/4。有关详细信息,请参见此Fedora错误。在此同时,我想找到一种解决方法。 我已经尝试重置通过字体大小,推荐这里,例如,而是(因为也注意到有)的GTK的LaF似乎忽略这一点。 我 可以 建立一个小部件工厂,该工厂还将为创建所有Swing