从其他应用程序覆盖Django表单域

时间:2012-08-07 17:42:19

标签: python django django-widget

Django Guardian在admin.py,GroupManage和UserManage中定义了两种形式:https://github.com/lukaszb/django-guardian/blob/master/guardian/admin.py#L368

我想为这两个表单添加自动完成功能,我认为最好的方法是覆盖组和用户的字段小部件(我的第一次尝试使用django autocomplete_light。)目标是不需要分叉django守护者。

所以在我的应用程序的models.py中,我添加了以下代码

GroupManage.__class__.group = forms.CharField(max_length=81,
    error_messages={'does_not_exist':
    "This group does not exist!"}, widget=ChoiceWidget(True))

我也试过用setattr无济于事。在django shell中,它的行为应该起作用,但是当加载管理页面时,将使用默认的CharField小部件恢复旧的组变量。

1 个答案:

答案 0 :(得分:1)

为类定义的字段存储在字典base_fields中。

GroupManage.base_fields['group'] = forms.CharField(max_length=81,
error_messages={'does_not_exist':
"This group does not exist!"}, widget=ChoiceWidget(True))

有时,更改字段属性而不是替换整个字段可能更容易:

GroupManage.base_fields['group'].help_text = "New help text"