实现Django admin的自定制

admin执行流程

<1> 循环加载执行所有已经注册的app中的admin.py文件

def autodiscover():
    autodiscover_modules('admin', register_to=site)

<2> 执行代码

#admin.py

class BookAdmin(admin.ModelAdmin):
    list_display = ("title",'publishDate', 'price')

admin.site.register(Book, BookAdmin) 

admin.site.register(Publish)

<3> admin.site

实现Django admin的自定制_第1张图片
image.png

这里应用的是一个单例模式,对于AdminSite类的一个单例模式,执行的每一个app中的每一个admin.site都是一个对象

<4> 执行register方法

admin.site.register(Book, BookAdmin) 
admin.site.register(Publish)
class ModelAdmin(BaseModelAdmin):pass

def register(self, model_or_iterable, admin_class=None, **options):
    if not admin_class:
            admin_class = ModelAdmin
    # Instantiate the admin class to save in the registry
    self._registry[model] = admin_class(model, self)

到这里,注册结束!
参考http://www.cnblogs.com/yuanchenqi/articles/8323452.html

具体步骤

1、创建项目
2、在app.py中做如下配置:


实现Django admin的自定制_第2张图片
image.png

3、具体代码

项目知识点

1、反向生成URL

    def change_list_url(self):
        name = '%s_%s_change_list'%(self.model._meta.app_label,self.model._meta.model_name)
        related_url = reverse(name,)
        return related_url

    def get_change_url(self,nid):
        name = '%s_%s_edit'%(self.model._meta.app_label,self.model._meta.model_name)
        related_url = reverse(name,args=(nid,))
        return related_url

    def get_del_url(self,nid):
        name = '%s_%s_del'%(self.model._meta.app_label,self.model._meta.model_name)
        related_url = reverse(name,args=(nid,))
        return related_url

    def get_add_url(self):
        name = '%s_%s_add'%(self.model._meta.app_label,self.model._meta.model_name)
        related_url = reverse(name,)
        return related_url

能实现每个App下面不同的表的增删改查。

你可能感兴趣的:(实现Django admin的自定制)