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")

猜你喜欢

转载自www.cnblogs.com/ye-hui/p/10285858.html