美文网首页
自定义Django后台admin的某一个模型的显示界面

自定义Django后台admin的某一个模型的显示界面

作者: 江海小流 | 来源:发表于2019-10-20 09:30 被阅读0次
@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
        }

其中:

  1. model 指向该Form对应的Model
  2. exclude表示不显示的field,空的tuple表示所有的字段都显示
  3. 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的字段的自定义显示。

相关文章

网友评论

      本文标题:自定义Django后台admin的某一个模型的显示界面

      本文链接:https://www.haomeiwen.com/subject/bduomctx.html