Django admin 学习笔记

近日在研究 Django admin 的二次开发,做一些笔记。

list_display 相关

  • list_display 决定管理页都显示哪些字段,可直接使用 models 中已定义的字段
  • 也可为一个函数,值为函数的返回值,字段名使用该函数的 short_description 属性。
    list_display = ('text', 'create_time', 'text_length')
    list_filter = ['create_time',]

    def text_length(self, obj):
        return len(obj.text)
    text_length.short_description = u'文本长度'
  • get_list_display 方法返回 list_display 的数据,可通过此方法根据不同情况显示不同的字段
class AnnouncementAdmin(admin.ModelAdmin):
    list_display = ('text', 'create_time')
    list_filter = ['create_time',]

    def text_length(self, obj):
        return len(obj.text)
    text_length.short_description = u'文本长度'

    def text_first(self, obj):
        return obj.text[0] if len(obj.text)>0 else "此处无内容"
    text_first.short_description = u'文本首字符'

    def get_list_display(self, request):
        if ( not request.user.is_superuser):
            self.list_display += ("text_length", )
        else:
            self.list_display += ("text_first", )
        return self.list_display

change_view (修改数据)相关

  • change_view 为修改数据时的函数,可以此还定制修改相关的操作
    (出于安全考虑,不在 fields 的字段添加也没用,readonly_fields 中的字段修改时会报错
    def change_view(self, request, object_id, extra_context=None):
        if request.method == "POST":    #提交修改
            # request.POST 和 request.GET 均为 Querydict 对象,默认不可修改,使用copy方法使其可修改
            request.POST = request.POST.copy()
            request.POST['text'] += '12321'
            return super(AnnouncementAdmin,self).change_view(request, object_id, extra_context)
        elif request.method == "GET":     # 进入修改页面
            return HttpResponse("this is a GET post")
  • save_model 在保存函数时调用,可用此方法重定义数据的保存
    由于这里的数据已经经过处理,所有的数据都可以修改,包括 readline_fields 中的字段,当然前提是合法
    建设所有数据的保存在 save_model 中操作,请求及验证在 change_view 中进行
    def save_model(self, request, obj,form, change):
        if change:    # 若是修改页面提交,则 change = True
            obj.name += ' -- add'
            obj.save()  # 最后或者调用 obj.save,或调用你们类的 save_model 方法,否则所有的数据都不会保存
        else:
            return super(LiveAdmin,self).save_model(request, obj, form, change)

参考:Django 自定义 Admin change page 的一般方法
发现一篇更全在,在此记录:这里写链接内容

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值