我想修改models.URLField
使用的窗口小部件,以在我的网站中包含内部链接的下拉列表(类似于any-urlfield
,但是从站点地图中检测到)。
我希望每个使用models.URLField
的外部应用都使用此自定义小部件,而不必重新定义每个应用formfield_overrides
。
我调查了django/contrib/admin/options.py
并找到了
FORMFIELD_FOR_DBFIELD_DEFAULTS = {
...
models.TextField: {'widget': widgets.AdminTextareaWidget},
models.URLField: {'widget': widgets.AdminURLFieldWidget},
models.IntegerField: {'widget': widgets.AdminIntegerFieldWidget},
models.BigIntegerField: {'widget': widgets.AdminBigIntegerFieldWidget},
...
}
基本上我想在可能的情况下更改此默认值。我将如何更改django管理站点范围内字段的默认小部件。
答案 0 :(得分:2)
为什么不更新这本词典?将此代码放在任何admin.py
文件中。
from django.contrib.admin import options
from django.db import models
from django.forms import widgets
options.FORMFIELD_FOR_DBFIELD_DEFAULTS[models.URLField] = {
'widget': widgets.TextInput}
更新:为了完成这项工作,您应该在任何admin.py
来电之前将此行放在admin.site.register()
的顶部。您还需要在admin.py
列表顶部的某处移动应用INSTALLED_APPS
。此更改将影响在上述应用程序之后加载的所有应用程序。