我有一个自定义的TagField表单字段。
class TagField(forms.CharField):
def __init__(self, *args, **kwargs):
super(TagField, self).__init__(*args, **kwargs)
self.widget = forms.TextInput(attrs={'class':'tag_field'})
如上所示,它使用了TextInput表单字段小部件。但在管理,我想它被使用Textarea部件显示。为此,有formfield_overrides
钩子,但它不适用于这种情况。
admin声明为:
class ProductAdmin(admin.ModelAdmin):
...
formfield_overrides = {
TagField: {'widget': admin.widgets.AdminTextareaWidget},
}
这对表单域小部件没有影响,tags
仍然使用TextInput小部件呈现。
任何帮助都是非常感谢的。
奥马特
4条答案
按热度按时间e5nqia271#
django管理员使用自定义小部件来处理它的许多字段。重写字段的方法是创建一个供ModelAdmin对象使用的Form。
然后,在ModelAdmin对象中,指定表单:
您也可以在此时覆盖查询集:根据模型中的另一个字段过滤对象,例如(因为
limit_choices_to
不能处理这个)kwvwclae2#
你可以通过扩展Django 1.2之后的
ModelForm
的Meta
类来覆盖字段小部件:https://docs.djangoproject.com/en/stable/topics/forms/modelforms/#overriding-the-default-fields
e4eetjau3#
对于一个特定的字段,而不是我使用的一种字段:
简体中文
谢谢,@穆拉特Çorlu
8xiog9wr4#
试着像这样改变你的领域:
这将允许使用来自
**kwargs
的小部件。否则,您的字段将始终使用form.TextInput
小部件。