Djiango orm 补充

一、元信息

modle类可以通过元信息类设置索引和排序信息

方法:在Model类中定义一个Meta子类

class Meta:
    # 自定义表名
    db_table = 'table_name'
    # 联合索引
    index_together = ('tag1', 'tag2')
    # 联合唯一索引
    unique_together = ('tag3', 'tag4')
    # 排序字段
    ordering = 'ordering_tag'
    # /admin/中显示的表名称
    verbose_name = 'table_name'

二、基于对象查询的sql优化

# 好处:信息存放在对象中,取值方便
# 坏处:所有字段都进行查询
# uq1 = Uesr.objects.all()
# print(uq1)
# print(uq1.query)

# only: 只取规定的字段形成对象(查主键)
# uq11 = Uesr.objects.all().only('name', 'age')
# print(uq11)
# print(uq11.query)
# print(uq11.first().name)
# print(uq11.first().gender)  # 自己又重新执行了查询该字段的sql

# defer:只取规定的字段外的字段形成对象(查主键)
# uq12 = Uesr.objects.all().defer('name', 'age')
# print(uq12)
# print(uq12.query)


# 好处:只对所需字段进行查询
# 坏处:数据放在字典中,相比对象取值不是那么方便
# uq2 = Uesr.objects.values('name', 'age')
# print(uq2)
# print(uq2.query)

三、自定义group_concat聚合函数

from django.db.models import Count, Sum

from django.db.models import Aggregate, CharField

class Concat(Aggregate):
    function = 'GROUP_CONCAT'
    template = '%(function)s(%(distinct)s%(expressions)s)'

    def __init__(self, expression, distinct=False, **extra):
        super(Concat, self).__init__(
            expression,
            distinct='DISTINCT ' if distinct else '',
            output_field=CharField(),
            **extra)

res = Uesr.objects.aggregate(names=Concat('name'))
print(res)

四、基于jQuery的ajax异步请求

<script src="jquery.js"></script>
<script>
    $.ajax({
        url: '请求路径',
        type: 'get|post',
        data: {
            // post请求数据
        },
        success: function(data) {
            // 请求的回调函数
        }
    })
</script>

 

posted @ 2019-03-11 16:08  zhao_peng  阅读(367)  评论(0编辑  收藏  举报