首页 > 其他 > 详细

项目一:CRM(客户关系管理系统)--3

时间:2017-12-23 22:37:07      阅读:344      评论:0      收藏:0      [点我收藏+]

前面我们已经将首页的雏形搞定,关于修饰部分,后面直接套用模板即可!接下来,我们需要做的是添加二级页面,也就是说,点击‘客户表’进入到独立的显示页面可以进行独立的操作。

1. 添加二级页面

1.1. 构造二级页面的路由

1.1.1. 原生admin二级页面路由分析

原生admin二级页面路由分析

先看图:

技术分享图片

从图中,我们可以知道该url的构成条件:域名/后台名称/应用名称/表名/

1.1.2. 仿造二级页面路由

在独立应用king_admin中的urls.py中添加,如下内容:

1 from django.conf.urls import url
2 from king_admin import views
3 urlpatterns = [
4     url(r^$, views.index, name=table_index),
5     url(r^(\w+)/(\w+)/$, views.display_objects, name=display_objects), #添加该数据,参数分别表示应用名和表名,name同样表示映射关系的引用
6 ]

 

1.2. 构造二级页面模板

king_admin模板目录下创建table_objs.html文件,然后只需要继承一级页面即可:

 1 {% extends king_admin/table_index.html %}
 2 {% block container %}
 3     <div class="panel panel-info">
 4           <div class="panel-heading">
 5             <h3 class="panel-title">Panel title</h3>
 6           </div>
 7           <div class="panel-body">
 8                <div class="row">
 9                </div>
10               {#具体的表格内容展示 #}
11               <table class="table table-hover">
12                   <thead>
13                        <tr>
14                                  <th> title_name </th>
15                        </tr>
16                   </thead>
17                   <tbody>
18                         <tr> </tr>
19                   </tbody>
20               </table>
21           </div>
22     </div>
23 {% endblock %}

 

1.3. 编写二级页面视图函数

内容如下:

1 def display_objects(request, app_name, table_name):
2     return render(request, king_admin/table_objs.html)

 

1.4. 在首页中添加链接入口

我们还要在首页文件中添加入口标签<a></a>,具体内容如下:

table_index.html文件添加内容如下:

 1 ...
 2  <tbody>
 3        {% for table_name, admin in table_names.items %}
 4          <tr>
 5          {#1.链接:url/应用名/表名,2. 显示中文表名--使用自定义标签进行处理#}
 6            <td><a href="{% url ‘display_objects‘ app_name table_name %}">{% render_verbose_name admin %}</a></td>
 7            <td>添加</td>
 8            <td>修改</td>
 9          </tr>
10        {% endfor %}
11  </tbody>
12                          
13 ...

这样,我们就能够通过首页进入到二级页面了,当然现在的二级页面还什么都没有,如图:

技术分享图片

2. 添加二级页面显示内容

二级页面中,我们看到有很多的内容,这里先添加显示表格的相关内容。

2.1. 原生admin添加显示内容分析

我们之前在原生的admin中进行注册时,添加了以下内容:

 1 #自定义操作
 2 class CustomerAdmin(admin.ModelAdmin):
 3     #显示字段
 4     list_display = (name, id,qq,source,consultant,content,status,date)
 5     #过滤
 6     list_filter = (source,consultant,date)
 7     #搜索
 8     search_fields = (qq,name)
 9     raw_id_fields = (consult_course,)
10     #水平显示
11     filter_horizontal = (tags,)
12     #可编辑
13     list_editable = (status,)
14 class UserProfileAdmin(admin.ModelAdmin):
15     list_display = (user,name)

 

2.2. king_admin中添加显示字段

在我们自己编写的admin中添加:

1 #自定义类,显示特定字段
2 class CustomerAdmin(BaseAdmin):
3     #显示字段
4     list_display = [qq,name,source,consultant,consult_course,date,status]
5     #过滤
6     list_filters = [source,consultant,consult_course,status]
7     #model = models.Customer<br>
8 class CustomerFollowUpAdmin(BaseAdmin):
9     list_display = (customer,consultant,date)

过滤是后边的内容,当前可以不加。

2.3. 根据字段提取数据

要显示的字段都有了,接下要根据这些字段到数据库中获取数据,并在模板渲染即可!

编写视图函数即可:

1 def display_objects(request, app_name, table_name):
2     #获取自定义的admin_class
3     admin_class = enabled_admins[app_name][table_name]
4     #数据查询
5     query_set = admin_class.model.objects.all()
6  
7     return render(request, king_admin/table_objs.html,
8                                  {admin_class: admin_class,
9                                   query_set: query_set})

2.4. 模板添加数据并渲染

在二级页面的模板中,添加如下内容:

 1 {% extends king_admin/table_index.html %}
 2 {% load tags %}
 3 {% block container %}
 4     <div class="panel panel-info">
 5           <div class="panel-heading">
 6             <h3 class="panel-title">Panel title</h3>
 7           </div>
 8           <div class="panel-body">
 9                <div class="row">
10                </div>
11               {#具体的表格内容展示 #}
12               <table class="table table-hover">
13                   <thead>
14                        <tr>
15                             {% for title_name in admin_class.list_display %}
16                                  <th>{{ title_name }}</th>
17                             {% endfor %}
18                        </tr>
19                   </thead>
20                   <tbody>
21                       {% for item in query_set %}
22                         <tr>
23                             {#创建列表行数据#}
24                             {% create_row item admin_class %}
25                         </tr>
26                       {% endfor %}
27                   </tbody>
28               </table>
29           </div>
30     </div>
31 {% endblock %}

文件内容分析:

  • 自定义标签
    使用它原因和首页是一样的,这里不再赘述!

自定义标签文件的内容:

 1 from  django  import template
 2 from  django.utils.safestring import mark_safe
 3 register = template.Library()
 4 #------------------------显示表名称-->中文---------------------------
 5 @register.simple_tag
 6 def render_verbose_name(admin_class):
 7     return admin_class.model._meta.verbose_name
 8 #-------------------------创建表格行数据-----------------------------
 9 @register.simple_tag
10 def create_row(query_set_obj, admin_class):
11     #创建标签元素--空,None不行
12     element = ‘‘
13  
14     #遍历要显示的models字段
15     for row in admin_class.list_display:
16     #获取显示字段对应的字段对象
17         field_obj = admin_class.model._meta.get_field(row)
18     #获取数据
19         #判断choice
20         if field_obj.choices:
21             #通过反射获取对象里面的值,并执行该方法get_字段_display()获取choices里面的数值
22             row_data = getattr(query_set_obj, get_{0}_display.format(row))()
23         else:
24             row_data = getattr(query_set_obj, row)
25  
26         #时间格式转换
27         if type(row_data).__name__ == datetime:
28             row_data = row_data.strftime(%Y-%m-%d %H-%M-%S)
29  
30         #标签元素的拼接
31         element += "<td>{0}</td>".format(row_data)
32     return mark_safe(element)

页面显示效果如下:

技术分享图片

 

项目一:CRM(客户关系管理系统)--3

原文:http://www.cnblogs.com/eaglesour/p/8094525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!