zoukankan      html  css  js  c++  java
  • Python Day 61 Django框架、Django框架ORM一对一表操作、Django列类型(重点)、自定义列类型、Django-amdin自带管理后台

      #内容回顾

    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', '')
                        ....
                    )
    #自定义char类型字段:因为django没有char类型,所以可以自定义
       class MyCharField(models.Field):
         def __init__(self,max_length,*args,**kwargs):
           self.max_length = max_length
           super().__init__(max_length=max_length,*args,**kwargs)
    
    
         def db_type(self, connection):
           return 'char(%s)'%self.max_length
     

       ##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 (男女)
  • 相关阅读:
    2018年工作总结
    通过js date对象获取各种开始结束日期的示例
    位运算
    Nhibernate官方体系结构图部分中文翻译
    javascript中判断变量是否存在的正确方式
    .net core 项目加载提示项目文件不完整缺少预期导入的解决办法
    dotnet core 运行程序注意事项
    关于.net 项目 nuget包还原项目失败的记录
    c#利用反射实现对类中的常量进行取值和对应常量的注释
    在ie9下在textbox框里面输入内容按enter键会触发按钮的事件
  • 原文地址:https://www.cnblogs.com/liangzhenghong/p/11203780.html
Copyright © 2011-2022 走看看