Django 模型


本文整理自网络,侵删。

简介

模型是有关数据的唯一确定的信息源。它包含要存储数据的基本字段和行为。通常,每个模型都映射到单个数据库表。

  • 每一个模型是django.db.models.Model的子类
  • 每一个模型属性代表数据表的一个字段。
  • Django提供了自动生成的数据库访问API,使用模型操作数据库很方便

快速示例

此示例模型定义了一个Person,其中包含first_name和 last_name

from django.db import models

class Person(models.Model):
    first_name = models.CharField(max_length=30)
    last_name = models.CharField(max_length=30)

first_name并且last_name是场模型。每个字段都指定为类属性,并且每个属性都映射到数据库列。

上面的Person模型将创建一个数据库表,如下所示:

CREATE TABLE myapp_person (
    "id" serial NOT NULL PRIMARY KEY,
    "first_name" varchar(30) NOT NULL,
    "last_name" varchar(30) NOT NULL
);
一些技术说明:
  • 表的名称myapp_person是自动从某些模型元数据派生而来的,但是可以被覆盖。
  • 一个id字段被自动添加,但这种行为可以被覆盖。
  • 在此示例中,SQL是使用PostgreSQL语法格式化的,但是值得注意的是Django使用了针对设置文件中指定的数据库后端定制的SQL 。CREATE TABLE

详情参考官网: https://docs.djangoproject.com/en/3.0/topics/db/models/

定义模型

Django根据属性的类型确定以下信息:

  • 当前选择的数据库支持字段的类型
  • 渲染管理表单时使用的默认html控件
  • 在管理站点最低限度的验证

django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。

默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。

pk是主键的别名,若主键名为id2,那么pk是id2的别名。

属性命名限制:

  • 不能是python的保留关键字。
  • 不允许使用连续的下划线,这是由django的查询方式决定的,在第4节会详细讲解查询。
  • 定义属性时需要指定字段类型,通过字段类型的参数指定选项。

       具体语法如下:

       属性=models.字段类型(选项)

模型字段类表

 字段类 默认小组件 说明
 AutoField N/A 根据 ID 自动递增的 IntegerField
 BigIntegerField NumberInput 64 位整数,与 IntegerField 很像,但取值范围是 -9223372036854775808 到 9223372036854775807 。
 BinaryField N/A 存储原始二进制数据的字段。只支持 bytes 类型。注意,这个字段的功能有限。
 BooleanField CheckboxInput 真假值字段。如果想接受 null 值,使用 NullBooleanField 。
 CharField TextInput 字符串字段,针对长度较小的字符串。大量文本应该使用 TextField 。有个额外的必须参数:max_length ,即字段的最大长度(字符个数)。
 DateField DateInput 日期,在 Python 中使用 datetime.date 实例表示。有两个额外的可选参数: auto_now ,每次保存对象时自动设为当前日期 auto_now_add ,创建对象时自动设为当前日期。
 DateTimeField DateTimeInput 日期和时间,在 Python 中使用 datetime.datetime 实例表示。与 DateField 具有相同的额外参数。
 DecimalField TextInput 固定精度的小数,在 Python 中使用 Decimal 实例表示。有两个必须的参数: max_digits 和 decimal_places 。
 DurationField TextInput 存储时间跨度,在 Python 中使用 timedelta 表示。
 EmailField TextInput 一种 CharField ,使用 EmailValidator 验证输入。max_length 的默认值为 254 。
 FileField ClearableFileInput 文件上传字段。详情见下面。
 FilePathField Select 一种 CharField ,限定只能在文件系统中的特定目录里选择文件。
 FloatField NumberInput 浮点数,在 Python 中使用 float 实例表示。注意, field.localize 的值为 False 时,默认的小组件是 TextInput 。
 ImageField ClearableFileInput 所有属性和方法都继承自 FileField ,此外验证上传的对象是不是有效的图像。增加了 height 和 width 两个属性。需要 Pillow 库支持。

字段选项

  • 通过字段选项,可以实现对字段的约束
  • 在字段对象时通过关键字参数指定
  • null:如果为True,Django 将空值以NULL 存储到数据库中,默认值是 False
  • blank:如果为True,则该字段允许为空白,默认值是 False
  • 对比:null是数据库范畴的概念,blank是表单验证证范畴的
  • db_column:字段的名称,如果未指定,则使用属性的名称
  • db_index:若值为 True, 则在表中会为此字段创建索引
  • default:默认值
  • primary_key:若为 True, 则该字段会成为模型的主键字段
  • unique:如果为 True, 这个字段在表中必须有唯一值

关联关系

多对一 (ForeignKey)

Django提供了定义了几种最常见的数据库关联关系的方法:多对一,多对多,一对一。

多对一关系,需要两个位置参数,一个是关联的模型,另一个是 on_delete 选项,外键要定义在多的一方,如一个汽车厂生产多种汽车,一辆汽车只有一个生产厂家

from django.db import models

class Manufacturer(models.Model):

    # ...

    pass

class Car(models.Model):

阅读剩余部分

相关阅读 >>

使用wsgi进行部署

Django 创建第一个项目

使用asgi进行部署

Django 安装

Django 模型

部署静态文章

Django 处理http请求

基于类的视图

内置基于类的通用视图

Django 的安全性

更多相关阅读请进入《Django》频道 >>




打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...