• Django 10 模型层 model 元信息,对象优化查询,自定义group_concat,基于jq的ajex异步请求


    Django model 元信息,对象优化查询,自定义group_concat,基于jq的ajex异步请求

    Model类元信息

    ORM对应的类里面包含另一个Meta类,而Meta类封装了一些数据库的信息。主要字段如下:

    da_table:ORM在数据库中的表名默认是 app_类名,可以通过db_table可以重写表名。
    index_together:联合索引
    unique_together:联合唯一索引
    ordering:指定默认按什么字段排序。
        	只有设置了该属性,我们查询到的结果才可以被reverse()。
    
    '''
    1. Model类可以通过元信息类设置索引和排序信息
    2. 元信息是在Model类中定义一个Meta来
    '''""""""
    class Meta:
        # 自定义表名
        db_table = 'table_name'
        # 联合索引
        index_together = ('tag1', 'tag2')
        # 联合唯一索引
        unique_together = ('tag3', 'tag4')
        # 排序字段
        ordering = 'ordering_tag'
        # /admin/中显示的表名称
        verbose_name = 'table_name'
    

    基于对象查询的优化

    '''
    1. 语法:only('tag_name1', ..., 'tag_name2') | defer('tag_name1', ..., 'tag_name2')
    2. 属于QuerySet的方法
    3. 用来优化面向对象查询的sql
    4. only代表哪些字段参与查询,defer表示哪些字段不参与查询
    '''
    
    好处:信息存放在对象中,取值方便
    坏处:所有字段都进行查询
    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().a1)
    
    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 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)
    

    基于jQuery的ajax异步请求

    <script src="jquery.js"></script>
    <script>
        $.ajax({
            url: '请求路径',
            type: 'get|post',
            data: {
                // post请求数据
            },
            success: function(data) {
                // 请求的回调函数
            }
        })
    </script>
    
  • 相关阅读:
    CodeForces-455A Boredom
    UVA-12627 Erratic Expansion
    汉诺塔系列问题
    CodeForces-999D Equalize the Remainders
    CodeForces-1061D TV Shows
    CodeForces-1061B Views Matter
    UVALive-7261 Xiongnu's Land
    HDU-4990 Reading comprehension
    -------------------------------用MyBatis处理表与表之间的关联关系----------------------------------
    -------------计算机里面算法-----------
  • 原文地址:https://www.cnblogs.com/prodigal/p/10503120.html
Copyright © 2020-2023  润新知