在站点范围内更改默认的django admin小部件

时间:2015-03-21 09:42:30

标签: python django

我想修改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管理站点范围内字段的默认小部件。

1 个答案:

答案 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。此更改将影响在上述应用程序之后加载的所有应用程序。