zoukankan      html  css  js  c++  java
  • django学习第84天Django常用字段和参数

    一.常用的字段

            1.AutoField
            int自增列,必须填入参数 primary_key=True。当model中如果没有自增列,则自动会创建一个列名为id的列。
            2.IntegerField
            一个整数类型,范围在 -2147483648 to 2147483647。
            3.CharField
            字符类型,必须提供max_length参数, max_length表示字符长度。
            4.DateField
            日期字段,日期格式  YYYY-MM-DD,相当于Python中的datetime.date()实例。
            5.DateTimeField
            日期时间字段,格式 YYYY-MM-DD HH:MM[:ss[.uuuuuu]][TZ],相当于Python中的datetime.datetime()实例
            6.BooleanField
            -对到数据库int类型(0或1)

    二.不常用的字段

            SmallIntegerField
            TextField:大文本
            EmailField:虽然写的是email,存的时候,只要是字符串就可以(admin内的校验)
            FileField(Field):存文件
            DecimalField  10进制小数

    三.orm字段参数

             null
            -unique:唯一性约束
            -db_index:给某个字段加索引
            -default
            - DateField和DateTimeField
                # auto_now_add=True 表示我要新增一条数据,自动设成当前时间
                # auto_now=True    只要修改,就更新成当前时间

    四.关系字段

            -ForeignKey
                -to
                -to_field
                -related_name
                -related_query_name
                -on_delete:
                    在删除的时候,做什么操作
                    -models.CASCADE 可以级联删除(lqz觉得不好)
                    -models.SET_NULL (lqz推荐用它)
                    -models.SET_DEFAULT
            -OneToOneField
                -同ForeignKey
            -ManyToManyField
                -自关联(自己关联)
                    -评论表
                    id  user   article  content   parent_id
                    1   1      1         你好       null
                    2   2      1         傻逼        1
    -多对多关系自动,手动创建第三张表(中介模型)
                第一种:全部手动创建,book跟author没有关联关系(不好,不建议使用)
                第二种:自动创建第三张表(不太好,第三张表如果有其它字段,就不行了)
                第三张:手动创建第三张表,并且用ManyToMany关联,所有的查询跟之前一样,只是增,删,改,需要通过表模型来处理
            -db_constraint=False
            
            -only和defer   
                # 总结
                # only和defer 返回结果是queryset对象内包裹表模型的对象
                # only,就是只查我指定的字段,一定会包含id   注意:没查的字段不要再用了
                # defer,指定不取哪个字段,一定会包含id     注意:没查的字段不要再用了

    五.手动创建第三张表

    class Book(models.Model):
        title = models.CharField(max_length=32, verbose_name="书名")
    
    # 自己创建第三张表,并通过ManyToManyField指定关联
    class Author(models.Model):
        name = models.CharField(max_length=32, verbose_name="作者姓名")
        books = models.ManyToManyField(to="Book", through="Author2Book", through_fields=("author", "book"))
        # through_fields接受一个2元组('field1','field2'):
        # 其中field1是定义ManyToManyField的模型外键的名(author),field2是关联目标模型(book)的外键名。
    
    
    class Author2Book(models.Model):
        author = models.ForeignKey(to="Author")
        book = models.ForeignKey(to="Book")
  • 相关阅读:
    Oracle不常用SQL
    C# xml 读xml、写xml、Xpath、Xml to Linq、xml添加节点 xml修改节点
    Oracle常见错误:ORA-06550、ORA-00911、ORA-02085
    IIS设置允许跨域
    npm和yarn 切换为国内镜像(淘宝镜像)
    Wordpress 所有 hook 钩子
    【C#】WPF多线程登录需求中报错 “调用线程无法访问对象,因为另一个线程拥有该对象“
    【C#】 WPF 中WebBrowser拖动来移动窗口,改变窗口位置
    【Java】Hibernate一级缓存测试分析
    javac编译单文件、多文件引入jar包、-cp解决无法加载主类问题
  • 原文地址:https://www.cnblogs.com/ye-hui/p/10285858.html
Copyright © 2011-2022 走看看