Python Day 61 Django框架、Django框架ORM一对一表操作、Django列类型(重点)、Django-amdin自带管理后台、Django框架中分页

  #内容回顾

ORM查询:
    
    1. 基本查询:
        all() : queryset [(obj), obj,....]
        first : 查询第一行 obj
        last  :查询最后一行 obj
        values: 查询指定的列  quertset[{name:'zekai', "age":12},....]
        values_list:  quertset[('zekai', 12),....]
    
    2. 高级查询:
        in: filter(id__in=[1,2,3])
        not in: exclude(id__in=[1,2,3])
        like %xxx%: filter(name__contains)
        like %xxx: filter(name__endswith)
        like xxx%: filter(name__startswith)
        
        between ... and : filter(id__range=[2,5])
        
        limit: .all()[10:20]  分页
        
        order by: .all().order_by('id') : asc '-id': desc
                  .all().order_by('id', '-name')
        
        group by: .values('name').annotate(xx=Count('id')).filter(xx__lt=3)
                  filter().values('name').annotate(xx=Count('id')).filter(xx__lt=3)
        
        only: 支取某一列的值, only('name') :id也会取出来
        defer: 除了某几列之外的 所有 defer('id') : id也会取出来
        using: 指定某一个数据库
        count(): 总共多少行
        filter(id__lt=3)
        
        and : filter(id=2, name='xxx')
        
        or: Q(Q(id=3) | Q(name='xxx')) & Q(id=3)
        
        F: F('age') + 1
        raw: 原生SQL
        connection : 类似pymysql
        
        
    3. 一对多:
        正向查询:
            objs = models.xxx.objects.all()
            for obj in objs:
                obj.外键.name
        
        反向查询:
            表名小写_set.all()
        
        .values: models.xxx.objects.filter('ut__name')
        .values_list
        
    
    4. 多对多:
        
        djagno:
            manytomanyfiled: 
                只创建两列  
                
        自己定制:
            写第三张表
            
        
    5. 删除:
        filter().delete()
        
        ps:
            级联删除
            ForeignKey(on_delete=models.CASCADE)
            
            CASCADE: 级联删除  默认
            SET_NULL: 取消级联删除
    
    6. update:
        filter。update(name='zekai')
View Code

  ##Django框架ORM一对一表操作

#1、列子:
    
    用户表(母表):
        id    name   age   
        1     icon   18
    

    
    薪水表(子表):
        id    money   us_id
         1      2000     1   (只能出现一次)

class UserInfo(models.Model):
    name = models.CharField(max_length=32)
    age = models.CharField(max_length=32)
    

class Salary(models.Model):
    money = models.CharField(max_length=32)
    us = models.OneToOneField("UserInfo")

#2、一对一新增操作和其他的基本没区别:
        # models.UserInfo.objects.create(name='icon',age=18)
        # models.Salary.objects.create(money=3000,us_id=1)
#3、一对一查询(反向查询有区别):
    ### 查询:
    ## 正向查询(子表查母表):
    ### Django版本为1.11.22 :res.us.name
    ### Django版本为1.11.10 : res.母表表名小写.name
    res = models.Salary.objects.filter(money="3000").first()
    print(res.us.name)


    ### 反向查询(母表查子表)
    ### obj.子表小写.子表列名 : res.salary.money
    res = models.UserInfo.objects.filter(name='icon').first()
    print(res.salary.money)

   ##Django列类型(重点********)

#两种比较    mysql                                     django
            
        tinyint                                         无
        smallint(unsigned)        SmallIntegerField (PositiveSmallIntegerField)
#数字    int (unsigned))             IntegerField   (PositiveIntegerField)
        mediumint                                    无
        bigint(unsigned)            BigIntegerField
        
        float                                  FloatField
        decimal(5,2) : 200.23                  DecimalField
        
        
        char                                     无
#字符串    varchar                               CharFiled
        text                                 TextField
        
        
#时间     datetime (2019-7-17 12:23:34)    DateTimeField        
         date      (2019-7-17)              DateField
         
         
    - 参数:
        max_length=32
        null=True  : 可以设置为null
        db_index=True : 设置索引
        default : 设置默认值
        unique : 设置唯一索引
            
        db_column: 设置一个列名
        
        unique_together: 联合唯一索引
        index_together :普通联合索引
            class Meta:
                unique_together = (
                    ('money', 'us_id'),
                    ....
                )
                index_together = (
                    ('money', '')
                    ....
                )

   ##Django-amdin自带管理后台(了解即可)

djagno-admin:
    django自带的管理后台系统
        命令生成:
            python3 manage.py  createsuperuser
    想要管理自己生成的表:
        admin.py:
            from app01 import models
            admin.site.register(models.UserInfo)
        
    
        django-admin中的列类型(一下的列类型只是在admin中起作用):
            EmailField(CharField):
                - 字符串类型,Django Admin以及ModelForm中提供验证机制
            IPAddressField(Field)
                - 字符串类型,Django Admin以及ModelForm中提供验证 IPV4 机制
            GenericIPAddressField(Field)
                - 字符串类型,Django Admin以及ModelForm中提供验证 Ipv4和Ipv6
                - 参数:
                    protocol,用于指定Ipv4或Ipv6, 'both',"ipv4","ipv6"
                    unpack_ipv4, 如果指定为True,则输入::ffff:192.0.2.1时候,可解析为192.0.2.1,开启刺功能,需要protocol="both"
            URLField(CharField)
                - 字符串类型,Django Admin以及ModelForm中提供验证 URL
            SlugField(CharField)
                - 字符串类型,Django Admin以及ModelForm中提供验证支持 字母、数字、下划线、连接符(减号)
            CommaSeparatedIntegerField(CharField)
                - 字符串类型,格式必须为逗号分割的数字
            UUIDField(Field)
                - 字符串类型,Django Admin以及ModelForm中提供对UUID格式的验证
            FileField(Field)
    
        djagno-admin中的参数 :
            verbose_name        Admin中显示的字段名称        
    
            blank               Admin中是否允许用户输入为空
            editable            Admin中是否可以编辑
            help_text           Admin中该字段的提示信息

            choices             Admin中显示选择框的内容,用不变动的数据放在内存中从而避免跨表操作
            choices = (
                (1, ''),
                (2, '')
            )
            gender = models.IntegerField(choices=chocies)
            
            id name  gender (男女)

  ##Django框架中分页

猜你喜欢

转载自www.cnblogs.com/liangzhenghong/p/11203780.html