我想在Django Admin更改表单的字段中添加占位符文本。在常规ModelForm中,您可以通过覆盖字段的小部件或通过在ModelForm self.fields['my_field'].widget
方法中修改__init__()
来实现。如何为Django Admin做类似的事情?
答案 0 :(得分:0)
在您的ModelAdmin上覆盖render_change_form()
方法,该方法提供对表单实例的访问:
class Address(model.Model):
street = models.CharField(max_length=50)
class AddressAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, *args, **kwargs):
form_instance = context['adminform'].form
form_instance.fields['street'].widget.attrs['placeholder'] = 'Your street'
return super().render_change_form(request, context, *args, **kwargs)
对于其他字段属性,例如autocomplete
,autofocus
,min
,max
,required
,{{1} }或type
。您还可以访问提供模型实例的pattern
,以防您想根据模型实例更改行为。
源代码是对此的最佳参考: https://docs.djangoproject.com/en/2.2/_modules/django/contrib/admin/options/#ModelAdmin
答案 1 :(得分:0)
记录的方法是覆盖get_form()
:
基本实现使用
modelform_factory()
来继承表单, 被字段和排除之类的属性修改。
如果查看modelform_factory的文档,您会发现您可以将widgets
用作 kwarg 。所以这应该工作:
class MyModelAdmin(admin.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
kwargs['widgets'] = {
'name': forms.TextInput(attrs={'placeholder': 'e.g. John Doe'})
}
return super().get_form(request, obj, **kwargs)
或者,如果要确保您没有覆盖任何小部件(如果您继承自ModelAdmin
的子类):
kwargs['widgets'] = kwargs.get('widgets', {})
kwargs['widgets'].update({'name': ...})
答案 2 :(得分:0)
这是一种无需手动将占位符文本添加到每个字段的方法:
admin.py
from django import forms
class MyModelAdmin(admin.ModelAdmin):
def render_change_form(self, request, context, *args, **kwargs):
form_instance = context['adminform'].form
for key, field in form_instance.fields.items():
if isinstance(field.widget, (forms.TextInput, forms.EmailInput)):
field.widget.attrs.update({'placeholder': field.label})
return super().render_change_form(request, context, *args, **kwargs)
答案 3 :(得分:0)
另一种方法是:
class MyModelAdmin(model.ModelAdmin):
def get_form(self, request, obj=None, **kwargs):
#--> Get form
form = super().get_form(request, obj, **kwargs)
#--> Add placeholder for field
form.base_fields['the_field_name'].widget.attrs['placeholder'] = "My_Place_Holder_Text"
#--> Return form
return form
#---
#---
这类似于dirkgroten的答案。这样做的好处是,无需担心用于该字段的小部件。