@admin.register(SampleModel)
class SampleAdmin(admin.ModelAdmin):
pass
在admin中注册某一个模型的时候,Django有一个默认的form,来管理这个模型各个字段的显示,可以通过如下代码来自定义这个form,从而实现自定义模型的后台显示界面。
@admin.register(SampleModel)
class SampleAdmin(admin.ModelAdmin):
form = SampleForm
SampleForm的示例代码为:
class SampleForm(ModelForm): # from django.forms import ModelForm
class Meta:
model = SampleModel
exclude = tuple()
widgets = {
'sample_field': SampleFieldWidget
}
其中:
- model 指向该Form对应的Model
- exclude表示不显示的field,空的tuple表示所有的字段都显示
- widgets表示指定自定义的字段显示
因此,通过自定义SampleFieldWidget就可以自定义sample_field的字段显示了
class SampleFieldWidget(Widget):
template_name = 'admin/forms/sample_field_widget.html'
可以通过写一个django的template,来自定义用于展示的html
了
需要注意的是,在父类Widget中,有一个 get_context的函数
def get_context(self, name, value, attrs):
context = {}
context['widget'] = {
'name': name,
'is_hidden': self.is_hidden,
'required': self.is_required,
'value': self.format_value(value),
'attrs': self.build_attrs(self.attrs, attrs),
'template_name': self.template_name,
}
return context
这里的context将传到模板的html上,用于html的数据显示。
所以,我们可以根据context的具体内容,写好html模板文件,通过上述代码将该模板文件对应到model的一个字段上,就可以完成对admin后台对于某一个model的字段的自定义显示。
网友评论