3-crm项目-kingadmin,先实现一个所有表的列表页面,

为什么要自己写一个admin:

为什么不使用django的admin?而要自己写一个呢?
因为你用django-admin不好做定制,不能无缝的嵌入到自己的项目中去,所以现在你就明白了,一定要搞定这个自定义的admin,
因为是你自己写的,所以后面怎么改你就完全懂了,
后面我要用这个kingadmin来写我自己的自动化项目,很快就会出来,

 

客户库

"""

实现学生库-----学生列表页面
1,有列表
2,搜索
3,有过滤
4,有分页
5,有批量操作,

要做成一个通用的页面,每个页面不配置都一样,然后特殊的部分通过 配置来实现,
你把这个搞出来了,就相当于自己写了一个admin了,
我们可以做成一个模块,可以应用到别的项目,单独做成一个app,

分析url,就是admin/appname/tablename
通过url找到这个表名,这个可以使用反射来找到,就可以把表里面的数据取出来,
然后把数据放到页面,页面上就可以传什么表就展示什么表了,
这是基本的思路

代码怎么写?
首先第一步,先实现一个所有表的列表页面,
1,创建页面,table_index.html
2,继承base,把菜单的部分删除掉,保留单行条,
3,使用bootstrap的面板,上面是appname,下面是tablename,

现在最重要的是解决为什么一注册就展示了这个表,
思路就是创建了一个字典:
{appname:{tablename: tableadminclass,
            tablename: tableadminclass,
            },
appname:{tablename: tableadminclass,
            tablename: tableadminclass,
            },
}

要会使用cmd来操作Python,快速验证自己的想法
到项目目录,
python manage.py shell
from crm import models
models.UserProfile
dir(models.UserProfile)
models.UserProfile._meta
models.UserProfile._meta.app_label------->获取app的名字
models.UserProfile._meta.model_name------>获取表的名字

怎么通过表名获取到modelclass,和app的名字呢? 1,model_class._meta.app_label 2,model_class._meta.model_name 怎么把admin_class 和model_class 进行关联呢? admin_class.model = model_class 加了一个属性,利于前端调用,
第二步:把字典返回到前端页面,进行渲染
django的tag标签是非常厉害的,要好好的利用,

第三步:把菜单做成一个超链接
肯定是一个a标签,然后把href的值渲染进来
url这个tag标签是怎么使用的呢? """

 总结:

 1,有这么多的表怎么把这些表都展示出来,

写一个注册的函数,

这个函数的作用就是在构建一个字典,{crm:{customer:customer_class}}

enabled_admins = {}
def register(model_class,admin_class=None):
    # 注册的用途就是构建了一个字典,
    # {"crm":{"表名":"对应的定制类"}}
    # 剩下的就是构建这个字典了
    if model_class._meta.app_label not in enabled_admins:
        enabled_admins[model_class._meta.app_label] = {}  # enabled_admins['crm'] = {}
    # admin_obj = admin_class()
    # admin_obj.model = model_class
    admin_class.model = model_class  # 绑定model 对象和admin 类,加上这一句利于前端调用,admin_class为空的问题需要特殊处理,这里没有处理,
    enabled_admins[model_class._meta.app_label][model_class._meta.model_name] = admin_class  
   # enabled_admins['crm']['customerfollowup'] = CustomerFollowUpAdmin

 

2,还需要一个views把这个字段,传到前端去

def index(request):
    #print(king_admin.enabled_admins['crm']['customerfollowup'].model )
    return render(request, "king_admin/table_index.html",{'table_list':king_admin.enabled_admins})

 

3,把这个字典放到页面上就可以循环展示了

只需要把表名展示出来,然后做为一个超链接,点击进入列表页

<div class="panel-body">
                        {{ table_list }}
                        {% for app_name,app_tables in table_list.items %}

                            <table class="table table-hover">
                                <thead>
                                <tr>
                                    <th>{{ app_name }}</th>
                                </tr>
                                </thead>
                                <tbody>
                                {% for table_name,admin  in app_tables.items %}
                                    <tr>
                                        <td>
                                            <a href="{% url 'table_objs' app_name table_name %}">
                                                {% render_app_name admin %}
                                            </a>
                                        </td>
                                        <td>add</td>
                                        <td>change</td>
                                    </tr>
                                {% endfor %}
                                </tbody>
                            </table>
                        {% endfor %}

                    </div>

 

 ###############################

posted @ 2020-08-04 18:36  技术改变命运Andy  阅读(120)  评论(0编辑  收藏  举报