Django Admin和它的小伙伴们
胡阳@搜狐
date: 2013-07-29
blog: the5fire.com
Django的Admin有什么?
- 基于Model自动创建的基础的CRUD页面
 - 批量操作:action、filter、search
 - 方便的自定义:ModelAdmin、ModelForm
 
数据层定制
重载ModelAdmin,设定属性:
class BookAdmin(admin.ModelAdmin):
    search_fields = ('name', 'alias')
    fields = ('name', 'alias', 'desc', 'category', 'tags', 'status',)
    list_display = ('preview', 'name', 'alias', 'category', 'create_time')
    form = BookForm
    list_per_page = 15
    def preview(self, obj):
        return '<a href="#">%s</a>' % obj
    preview.short_description = u'预览'
    preview.allow_tags = True
以及重写逻辑:
@csrf_protect_m
def changelist_view(self, request, extra_context=None):
    # blablabla
页面逻辑定制
自定义Form:
class BookForm(forms.ModelForm):
    name = forms.CharField(max_length='20', label=u'modif by form')
    def clean_name(self):
        raise ValidationError(u'哈哈,错了吧')
    class Meta:
        model = Book
深度定制
重写admin模板自定义context不好
合理的方式是模板继承,继承ModelAdmin
需要探索模板:
▾ admin/ ▸ bin/ ▸ locale/ ▸ static/ ▾ templates/ ▸ admin/ ▸ registration/ ▸ templatetags/ ▸ views/ __init__.py [RO] actions.py [RO] filters.py [RO] forms.py [RO] helpers.py [RO] models.py [RO] options.py [RO] sites.py [RO] tests.py [RO] util.py [RO] validation.py [RO] widgets.py [RO]
自带Admin的问题
- 文档甚少,需要看源码
 - 代码的高耦合
 
So, 小伙伴来了
- admin2 - by pydanny
 - xadmin - by sshwsfc(差沙)微云
 
好看的主题
都是基于Bootstrap
数据层的更改
- xadmin把ModelAdmin分离出View层(类似Django的view)
 - djadmin2重用了Django的View
 
优缺点-xadmin
- 优点
 - 功能完善
 - 插件机制
 - 完全替代
 
- 缺点
 - 文档不全
 - 定制可能麻烦
 
优缺点-djadmin2
- 优点
 - 可自定义主题
 - restful接口
 - 代码直接(不绕)
 
- 缺点
 - 功能比较弱
 - 目前未完全覆盖django的admin
 
参考
我自己用xadmin和djadmin2做了个demo: https://github.com/the5fire/django_admin_demo
        ----EOF-----
        
微信公众号:Python程序员杂谈
微信公众号:Python程序员杂谈
