• Django项目实战----模型篇


    Django项目实战----模型篇

    Django 内置了数十种字段类型;如果 Django 内置类型不能满足你的需求,你可以很轻松地编写自定义的字段类型;

    字段类型

    AutoField

    根据可用的 ID 自动递增。通常设置主键的时候应用它参数必须设置primary_key=True
    范围和IntegerField一样

    id = models.AutoField(primary_key=True)
    
    • 1

    不过主键一般不用自己设置,django会自动帮你设置一个自增的主键

    BigAutoField

    一个64位整数,范围 1 到 9223372036854775807
    类似于BigIntegerField的无符号位

    BigIntegerField

    BigIntegerField(max_length=None,**options)
    
    • 1

    一个64位整数,范围 -9223372036854775808 到 9223372036854775807

    BinaryField

    存储二进制字段,可以用来存储文件,但是在数据库中存储文件是非常不理智的行为

    BooleanField

    bool值的字段
    用来存放 true和false

    CharField

    CharField(max_length=None, **options)
    
    • 1

    存放字符串。必须指定最长的长度
    如果文本的长度太长可以考虑 TextField

    DateField

    DateField(auto_now=False, auto_now_add=False, **options)
    
    • 1

    用来存放时间的字段

    • 参数auto_now=True 每次保存对象时自动将该字段设置成当前时间
    • 参数auto_now_add=True 只在第一次创建对象时自动将该字段设置为创建的时间,不可以被修改

    这两个参数互斥,不能同时为True

        first_time = models.DateField(auto_now_add=True) 
        update_tim = models.DateField(auto_now=True)
    
    • 1
    • 2

    DecimalField

    DecimalField(max_digits=None, decimal_places=None, **options)
    
    • 1

    一个固定精度的十进制数

    • max_digits 数字中允许的最大位数 该值需大于decimal_places
    • decimal_places 小数位数
      举例
      要存储最高为 999.99 的数字,精度为小数点后 2 位
    number = models.DecimalField(max_digits=5, decimal_places=2)
    
    • 1

    DurationField

    用于存储时间段的字段 (不常用)

    EmailField(max_length=254, **options)

    邮箱,
    使用 EmailValidator 来检查该值是否为有效的电子邮件地址。

    FileField

     FileField(upload_to='', storage=None, max_length=100, **options)
    
    • 1

    文件上传字段
    这个文件字段的需要注意的太多了,回来单独出一篇文章

    FilePathField

    FilePathField(path='', match=None, recursive=False, allow_files=True, allow_folders=False, max_length=100, **options)
    
    • 1

    存储文件目录

    FloatField

    表示的浮点数
    注意FloatField 和 DecimalField 的区别,一个不能精确表示小数,一个能能精确表示小数

    GenericIPAddressField

     GenericIPAddressField(protocol='both', unpack_ipv4=False, **options)
    
    • 1

    IPv4 或 IPv6 地址,字符串格式

    ImageField

    ImageField(upload_to=None, height_field=None, width_field=None, max_length=100, **options)
    
    • 1

    保存图片,存储的是文件路径

    IntegerField

    整数 范围-2147483648 到 2147483647

    JSONField

    JSONField(encoder=None, decoder=None, **options)
    
    • 1

    存储 JSON 编码数据的字段

    TextField

    大的文本字段,一般用来存放文章内容

    TimeField

    存放时间

    UUIDField

    存储通用唯一标识符的字段,使用 Python 的 UUID 类

    关系字段

    ForeignKey

     ForeignKey(to, on_delete, **options)
    
    • 1

    多对一的关系

    • to 指定关联的类
    • on_delete 在删除关联数据时采用的方式,根据不同的需求进行选择
    #一个A类实例对象关联多个B类实例对象
    class A(model.Model):
    ....
    class B(model.Model):
        属性 = models.ForeignKey(to=A,on_delete=models.CASCADE ...)
        # CASCADE 级联删除
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    ManyToManyField

    ManyToManyField(to, **options)
    
    • 1

    多对多 需要一个位置参数:模型相关的类

    • to 指定关联的类
    class Author(models.Model):
        ...
    class Book(models.Model):
        ...
        authors = models.ManyToManyField(Author)
    
    • 1
    • 2
    • 3
    • 4
    • 5

    OneToOneField

    OneToOneField(to, on_delete, parent_link=False, **options)
    
    • 1

    一对一的关系

    • to 指定关联的类
    class A(model.Model): 
    ...
    class B(model.Model):
        属性 = models.OneToOneField(A)
    
    • 1
    • 2
    • 3
    • 4
  • 相关阅读:
    认识 计算机语言Python 程序,pycharm编辑器编写,基本语法【注意:变量的命名(变量名只能由字母、数字和下划线组成,第一个字符不能是数字)】
    springcloudalibaba架构(30):Dubbo的使用入门
    [docker] -- 初识docker
    如何实现一个简单易用的 RocketMQ SDK
    Spring09、代理模式
    ld-linux-armhf.so.3
    求m的n次方你会吗(优化时间复杂度)
    思科模拟器的远程连接交换机的实现
    任萧文——少年何妨梦摘星?敢挽桑弓射玉衡
    可编程 USB 转串口适配器开发板 S2S 功能介绍
  • 原文地址:https://blog.csdn.net/qq_52007481/article/details/126403236