CRM项目实战-kingadmin根据list-display配置生成的数据

a.get_status_display()  获取choice对应的值

models.User._meta.fields  获取model所有的字段对象

models.User._meta.get_field()  获取某个字段的对象

field.get_internal_type()  获取某个字段对象的字段类型

对象 b.replace()  替换初始化数据

from kingadmin.sites import site
from kingadmin.admin_base import BaseKingAdmin
from crm import models
print(‘crm kingadmin ............‘)

class CustomerAdmin(BaseKingAdmin):
    list_display = [‘name‘,‘source‘,‘contact_type‘,‘contact‘,‘consultant‘,‘consult_content‘,‘status‘,‘date‘]
    list_filter = [‘source‘,‘consultant‘,‘status‘,‘date‘]
    search_fields = [‘contact‘,‘consultant__name‘]

site.register(models.CustomerInfo,CustomerAdmin)
site.register(models.Role)
site.register(models.Menus)
site.register(models.UserProfile)

kingadmin.py

{% extends ‘kingadmin/index.html‘ %}
{% load kingadmin_tags %}

{% block  right-content-container %}
<h2 class="page-header">app</h2>

<div>

        {{ querysets }}

        <div>
            <form>

                {% for filter_column in admin_class.list_filter %}
                   {% build_filter_ele filter_column admin_class %}
                {% endfor %}

                <input type="submit" value="过滤">
            </form>

        </div>

        <table class="table table-striped">
            <thead>
                <tr>
                    {% for column in admin_class.list_display %}
                        <th>{{ column }}</th>
                    {% endfor %}
                </tr>
            </thead>
            <tbody>
                {% for obj in querysets %}
                    <tr>{%  build_table_row obj admin_class %}</tr>
                {% endfor %}
            </tbody>

        </table>

</div>

{% endblock %}

table_obj_list.html

from django.template import Library
from django.utils.safestring import mark_safe
import datetime ,time
register = Library()

@register.simple_tag
def build_filter_ele(filter_column,admin_class):

    column_obj = admin_class.model._meta.get_field(filter_column)
    print("column obj:",column_obj)
    try:
        filter_ele = "<select name=‘%s‘>" % filter_column
        for choice in column_obj.get_choices():
            selected = ‘‘
            if filter_column in admin_class.filter_condtions:#当前字段被过滤了
                # print("filter_column", choice,
                #       type(admin_class.filter_condtions.get(filter_column)),
                #       admin_class.filter_condtions.get(filter_column))
                if str(choice[0]) == admin_class.filter_condtions.get(filter_column):#当前值被选中了
                    selected = ‘selected‘
                    print(‘selected......‘)

            option = "<option value=‘%s‘ %s>%s</option>" % (choice[0],selected,choice[1])
            filter_ele += option
    except AttributeError as e:
        print("err",e)
        filter_ele = "<select name=‘%s__gte‘>" % filter_column
        if column_obj.get_internal_type() in (‘DateField‘,‘DateTimeField‘):
            time_obj = datetime.datetime.now()
            time_list = [
                [‘‘,‘------‘],
                [time_obj,‘Today‘],
                [time_obj - datetime.timedelta(7),‘七天内‘],
                [time_obj.replace(day=1),‘本月‘],
                [time_obj - datetime.timedelta(90),‘三个月内‘],
                [time_obj.replace(month=1,day=1),‘YearToDay(YTD)‘],
                [‘‘,‘ALL‘],
            ]

            for i in time_list:
                selected = ‘‘
                time_to_str = ‘‘if not i[0] else  "%s-%s-%s"%(i[0].year,i[0].month,i[0].day)
                if  "%s__gte"% filter_column in admin_class.filter_condtions:  # 当前字段被过滤了
                    print(‘-------------gte‘)
                    if time_to_str == admin_class.filter_condtions.get("%s__gte"% filter_column):  # 当前值被选中了
                        selected = ‘selected‘
                option = "<option value=‘%s‘ %s>%s</option>" %                          (time_to_str ,selected,i[1])
                filter_ele += option

    filter_ele += "</select>"
    return mark_safe(filter_ele)

@register.simple_tag
def  build_table_row(obj,admin_class):
    """生成一条记录的html element"""

    ele = ""
    for column_name in admin_class.list_display:

        column_obj = admin_class.model._meta.get_field(column_name)
        if column_obj.choices: #get_xxx_display
            column_data = getattr(obj,‘get_%s_display‘% column_name)()
        else:
            column_data = getattr(obj,column_name)

        td_ele = "<td>%s</td>"% column_data
        ele += td_ele

    return mark_safe(ele)

kingadmin_tags.py

原文地址:https://www.cnblogs.com/jintian/p/11324350.html

时间: 2024-07-31 12:20:33

CRM项目实战-kingadmin根据list-display配置生成的数据的相关文章

CRM项目实战-kingadmin自动发现及注册功能开发

{% extends 'kingadmin/index.html' %} {% block right-content-container %} <h2 class="page-header">app</h2> <div> {% for app_name,app_tables in site.enabled_admins.items %} <table class="table table-striped"> <

CRM项目实战-kingadmin model obj list 页面开发

from kingadmin.admin_base import BaseKingAdmin class AdminSite(object): def __init__(self): self.enabled_admins = {} def register(self,model_class,admin_class=None): """注册admin表""" #print("register",model_class,admi

CRM项目实战-kingadmin m2m filter_horizonal

input标签 绑定onchange事件,移出输入框才触发:绑定oninput事件,是实时触发 jQuery:v.toUpperCase() 变大写 v.search(n) n不存在字符串v中,返回-1 原文地址:https://www.cnblogs.com/jintian/p/11337228.html

CRM项目实战-kingadmin对象删除功能开发

a._meta.fields_map 获取与a对象表关联的所有表 a._meta.fields a对象表所有字段对象 a._meta.related_objects 反向关联的表 alert-danger 原文地址:https://www.cnblogs.com/jintian/p/11337247.html

CRM项目实战-kingadmin+admin+action功能开发

原文地址:https://www.cnblogs.com/jintian/p/11337299.html

Spark大型项目实战:电商用户行为分析大数据平台

本项目主要讲解了一套应用于互联网电商企业中,使用Java.Spark等技术开发的大数据统计分析平台,对电商网站的各种用户行为(访问行为.页面跳转行为.购物行为.广告点击行为等)进行复杂的分析.用统计分析出来的数据,辅助公司中的PM(产品经理).数据分析师以及管理人员分析现有产品的情况,并根据用户行为分析结果持续改进产品的设计,以及调整公司的战略和业务.最终达到用大数据技术来帮助提升公司的业绩.营业额以及市场占有率的目标. 1.课程研发环境 开发工具: Eclipse Linux:CentOS 6

中华石杉 Spark大型项目实战:电商用户行为分析大数据平台138讲视频教程(项目实战)

38套大数据,云计算,架构,数据分析师,Hadoop,Spark,Storm,Kafka,人工智能,机器学习,深度学习,项目实战视频教程 视频课程包含: 38套大数据和人工智能精品高级课包含:大数据,云计算,架构,数据挖掘实战,实时推荐系统实战,电视收视率项目实战,实时流统计项目实战,离线电商分析项目实战,Spark大型项目实战用户分析,智能客户系统项目实战,Linux基础,Hadoop,Spark,Storm,Docker,Mapreduce,Kafka,Flume,OpenStack,Hiv

Vue2+VueRouter2+webpack 构建项目实战(三):配置路由,运行页面

制作.vue模板文件 通过前面的两篇博文的学习,我们已经建立好了一个项目.问题是,我们还没有开始制作页面.下面,我们要来做页面了. 我们还是利用 http://cnodejs.org/api 这里公开的api来做项目.不过本章节不涉及调用接口等内容.这里,我们假设我们的项目是做俩页面,一个列表页面,一个内容页面.列表页面有分页等,内容页面展示. 因此,我们需要两个模板文件. 我们在src/page目录下面新建两个文件,分别是index.vue和content.vue index.vue代码: <

Asp.Net Core 2.0 项目实战(6)Redis配置、封装帮助类RedisHelper及使用实例

本文目录 1. 摘要 2. Redis配置 3. RedisHelper 4.使用实例 5. 总结 1.  摘要 由于內存存取速度远高于磁盘读取的特性,为了程序效率提高性能,通常会把常用的不常变动的数据存储在系统内存中,提升数据读取的速度,在C#下常见的内存操作有微软自带的内存处理.分布式缓存Memcached以及Redis,这里我们介绍Redis分布式缓存,另外两种缓存处理参考<Asp.Net Core 2.0 项目实战(8)Core下缓存操作.序列化操作.JSON操作等Helper集合类>