如何修改 Django 中特定类型的所有内置表单字段的默认小部件?

     2023-02-24     225

关键词:

【中文标题】如何修改 Django 中特定类型的所有内置表单字段的默认小部件?【英文标题】:How do you modify the default widget for all builtin form fields of a certain type in Django? 【发布时间】:2010-10-14 10:50:14 【问题描述】:

这是How do you change the default widget for all Django date fields in a ModelForm?的后续报道。

假设您有大量模型(例如 A-ZZZ)随着您无法控制的其他开发人员的输入而增长,并且您想要更改所有日期字段的输入方式(即通过使用 jQueryUI )。确保使用该新小部件填写所有日期字段的最佳方法是什么?

引用问题的一个建议是:

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

但是,如果您没有明确的 ModelForm,但 url 模式直接来自模型,是否可以这样做?即你的 url 配置是这样的:

url(r'^A/?$', 'list_detail.object_list', SomeModelA)

其中 SomeModelA 是由 Django 在后台转换为 ModelForm 的模型(不是表单)。

目前在我的系统中,每个模型都没有表格。显式创建表单的唯一要点是添加先前解决方案中建议的 formfield_callback,但这违反了 DRY 原则,并且容易出错且劳动强度大。

我考虑过(如上一个帖子中所建议的那样)创建我自己的具有特殊小部件的字段并使用它而不是内置的。它不是很费力,但可能会出错(不过没有什么是好的 grep 无法修复的)。

感谢您的建议和想法。

【问题讨论】:

【参考方案1】:

听起来您想在整个项目范围内执行此操作(即:您不是在某些情况下尝试执行此操作,而是在所有正在运行的应用程序中尝试执行此操作)。

一种可能性是替换 DateField 类本身的小部件属性。您需要在某个中心位置执行此操作......保证由 django 应用程序的每个运行实例加载的内容。中间件可以帮助解决这个问题。否则,只需将其放入您应用的 __init__ 文件中即可。

您要做的是为 forms.DateField 类本身重新分配小部件属性。创建新的 DateField 时,Django 会检查代码是否在字段属性定义中指定了任何特定的小部件。如果不是,它使用 DateField 的默认值。我假设如果您的场景中的用户确实定义了一个特定的小部件,那么尽管您的全局 API 发生了变化,您仍然希望遵守这一点。

试试这个作为强制默认到其他一些小部件的例子......在这种情况下是一个隐藏输入:

from django import forms
forms.DateField.widget = forms.HiddenInput

class Foo(forms.Form):
    a = forms.DateField()

f = Foo()
print f.fields['a'].widget
# results in <django.forms.widgets.HiddenInput object at 0x16bd910>

【讨论】:

这就是票。谢谢。 太棒了!非常感谢!

如何仅使用 Python/Django 将特定的 html 附加到 Django 代码块?

】如何仅使用Python/Django将特定的html附加到Django代码块?【英文标题】:HowtoappendspecifichtmltoaDjangocodeblockusingonlyPython/Django?【发布时间】:2021-11-0107:22:44【问题描述】:我有一个在Django中使用的表单。我有一个内置的错误消息,我... 查看详情

在 Django 中制作不同的注册表单?

...类型的用户。我创建了两个继承自AbstractUser模型的模型。如何更新UserCreationForm以使其具有用户类型字段?【问题讨论】:【参考方案1】:只需覆盖内置的U 查看详情

针对特定类型的所有变量的 django 模板过滤器

】针对特定类型的所有变量的django模板过滤器【英文标题】:djangotemplatefilterforallvariablesofspecifictype【发布时间】:2015-09-2015:25:43【问题描述】:在Django中,我想在我的所有模板中为特定类型的所有变量使用特定过滤器。例如,... 查看详情

在 django1.3 中使用像 PasswordChangeForm 这样的内置表单和视图

...2011-11-2119:44:27【问题描述】:我是django新手,在django1.3我如何使用内置表单,如PasswordChangeForm,PasswordResetForm等,同样使用内置-在意见 查看详情

如何在 Django 中列出所有与表单相关的错误?

】如何在Django中列出所有与表单相关的错误?【英文标题】:HowcanIlistallformrelatederrorsinDjango?【发布时间】:2011-03-0220:43:09【问题描述】:有没有直接列出Django模板中所有表单错误的方法。我想列出字段和非字段错误以及任何其... 查看详情

如何在 django 表单中获取员工用户的用户名

】如何在django表单中获取员工用户的用户名【英文标题】:Howfetchusernameofstaffuserindjangoforms【发布时间】:2020-07-2914:26:14【问题描述】:我正在使用自定义用户模型。我还有另一个客户模型。我希望用户字段仅显示员工用户,而... 查看详情

如何检测 Django 模板中表单元素的类型?

】如何检测Django模板中表单元素的类型?【英文标题】:HowtodetecttypeofformelementinDjangotemplate?【发布时间】:2014-02-2817:38:47【问题描述】:我正在渲染表单模板。相关代码是这样的:%forfieldinfilter.form%%iffield.is_hidden%field%else%<divcla... 查看详情

如何使用魔法来验证 Django 表单清理方法中的文件类型?

】如何使用魔法来验证Django表单清理方法中的文件类型?【英文标题】:HowdoesoneusemagictoverifyfiletypeinaDjangoformcleanmethod?【发布时间】:2012-01-2815:55:53【问题描述】:我在Django中使用FileField编写了一个电子邮件表单类。我想通过检... 查看详情

django如何写表单提交

...把文本框中的字改变。django一般是用template来做页面的,如何编写模板和调用模板请参考:http://djangobook.py3k.cn/chapter04/当然如果页面里不用加载数据的话你可以直接写个静态的HTML页面。“设置文本框默认有字,点修改按钮可以把... 查看详情

如何在Django中获取具有特定权限组的所有用户的列表

】如何在Django中获取具有特定权限组的所有用户的列表【英文标题】:HowtogetalistofalluserswithaspecificpermissiongroupinDjango【发布时间】:2010-09-2713:22:33【问题描述】:我想获取所有具有特定权限组的Djangoauth用户的列表,如下所示:use... 查看详情

如何在 Django 中修改 Bootstrap 4 表单验证信息呈现方式?

】如何在Django中修改Bootstrap4表单验证信息呈现方式?【英文标题】:HowtomodifyBootstrap4formvalidationinformationpresentationinDjango?【发布时间】:2021-03-1105:08:08【问题描述】:我正在使用Django和Bootstrap4。我想自定义表单验证信息在我正在... 查看详情

Django,遍历所有表单错误

】Django,遍历所有表单错误【英文标题】:Django,loopoverallformerrors【发布时间】:2011-01-2814:01:10【问题描述】:在我的模板中,我想遍历所有表单错误,包括不属于特定字段的错误。(这意味着对于form.errors,它也应该显示__all__... 查看详情

如何在 django rest 框架中列出来自特定模型的所有对象?

】如何在djangorest框架中列出来自特定模型的所有对象?【英文标题】:Howtolistallobjectsfromparticularmodelindjangorestframework?【发布时间】:2022-01-2122:42:24【问题描述】:我有两个模型:classProduct(models.Model):name=models.CharField(max_length=200)p... 查看详情

Django:如何显示内联表单集中每个模型对象的表单错误

】Django:如何显示内联表单集中每个模型对象的表单错误【英文标题】:Django:howtodisplayformerrorsforeachmodelobjectinainlineformset【发布时间】:2012-03-1505:49:38【问题描述】:我有一个作者模型和一个书籍模型。用户可以修改给定作者的... 查看详情

如何将 Django 的内置身份验证与自定义表单(html 模板)一起使用

】如何将Django的内置身份验证与自定义表单(html模板)一起使用【英文标题】:HowtouseDjango\'sinbuiltauthenticationwithcustomforms(htmltemplates)【发布时间】:2021-12-0917:43:56【问题描述】:我正在尝试使用Django创建一个网站,用户可以在其... 查看详情

如何显示作为最终 django 表单向导步骤输入的所有数据的预览?

】如何显示作为最终django表单向导步骤输入的所有数据的预览?【英文标题】:HowcanIshowapreviewofalldataenteredasafinaldjangoformwizardstep?【发布时间】:2013-02-0111:23:16【问题描述】:我在django1.4中使用表单向导来有条件地添加最多七个... 查看详情

如何在不通过视图在所有页面中发送表单的情况下从 django 布局(如“base.html”)获取表单数据?

】如何在不通过视图在所有页面中发送表单的情况下从django布局(如“base.html”)获取表单数据?【英文标题】:Howcanigetformdatafromdjangolayouts(like\'base.html\')withoutsendingformsinallpagethroughviews?【发布时间】:2019-04-0319:30:06【问题描述... 查看详情

带有内置登录视图和身份验证表单的 Django “记住我”

...henticationform【发布时间】:2013-02-1213:40:48【问题描述】:如何重用原始管理员login()和AuthenticationForm为在登录页面选中“记住我”选项的用户设置更长的cookie长度?我目前正在通过urls.py使用 查看详情