Django Admin 模块的一点笔记


发布于

|

分类

Django 的 Admin 模块还算是比较好用的吧,最起码不用完全自己造轮子了。但是这个东西也不能拿来就用。下面说说这几天遇到的坑。

change list 里面,那个 “删除选中” 的 action 如何去掉?

我定义了三个自己的 action,但是 action 列表里面总是有 “删除选中” 这个 action。明明没有在 actions 里面写啊!

Django 获取 action 列表的时候应该是通过 get_actions 函数来获取的。那么,重写一下这个函数就好了。如下。

class XXXAdmin(admin.ModelAdmin):
    actions = [my_action_1, my_action_2, my_action_3]

    def get_actions(self, request):
        # Disable delete
        actions = super(XXXAdmin, self).get_actions(request)
        del actions['delete_selected']
        return actions

我有一个 XXXModel ,想在首页上放一个到这个 Model 管理页面的直达链接?

对的,就是这个奇怪的需求。

首先情况说明几个东西:Django 的 Admin Site 分为好多种页面。直接用 admin.site.register 注册出来的这个大表格页面叫做 changelist(好奇怪的名字啊),可以对 Model 进行修改的页面叫做 change

其次,为了到达这个大表格页面,我们需要知道两个东西:app_labelmodel_name

app_labelmanage.py startapp XXXX 之后,apps.py 里面的 name。一般会和前面你输入的 XXXX 是一致的。

model_name 么…… 比如你在 models.py 里面定义了一个 ABCModelLalala,那么 model_name 就是 abcmodellalala

然后,在 Template 里面的使用方法为:{% url'admin:{{app_label}}_{{model_name}}_changelist'%}

比如,我的 application 叫做 HowOldAreYou,有一个 Model 叫做 ModelAge,那么,为了直达这个 Model 的管理大表格,我需要写的链接 URL 为 {% url'admin:HowOldWebsite_modelage_changelist'%}

参考资料:The Django admin site

我想自定义 Action

可以。直接看 doc 即可。

注意,queryset 可以直接当成 list 来用,也可以直接 queryset.update(xx=xxx) 这样一下子全部更新。

我想让在列表里面显示个图片出来

拿个函数包裹一下就好了。

class XXXAdmin(admin.ModelAdmin):
    list_display = ('img_show', 'xxx', 'xxx', 'xxx')
    actions = None
    def img_show(self, obj):
        s = u'<img src="{}face/{}.jpg"style="width:2em;height:2em">'
        return format_html(s, django.conf.settings.MEDIA_URL, str(face.id))

感觉 Django 用尽了 Python 的黑魔法。

我知道类名,想获取这个类本身

恩,反射。

抓面这段代码很有用:

def reflect_get_class(class_full_name):
    parts = class_full_name.split('.')
    module = ".".join(parts[:-1])
    m = __import__(module)
    for comp in parts[1:]:
        m = getattr(m, comp)
    return m

=====

现就这么多。以后遇到坑再写。

第二次拿 Django 写东西,还是不熟练啊!


评论

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注