美文网首页
自定义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