1、models.py文件中创建类
models.py文件中对应的类即为表对象,类名就是表名。
class SysUser(models.Model):
id = models.AutoField(primary_key=True, null=False, max_length=11, unique=True) # 自增id,设置主键
name = models.CharField(null=False, max_length=255, unique=True) # varchar且不能为空的字段
login_name = models.CharField(null=False, max_length=255)
password = models.CharField(null=False, max_length=255)
date = models.DateTimeField(null=True)
age = models.IntegerField() # 整形,默认长度为11
class Meta:
db_table = 'sys_user' # 指明数据库表名
verbose_name = '用户信息' # 在admin站点中显示的名称
verbose_name_plural = verbose_name # 显示的复数名称
def __str__(self):
"""定义每个数据对象的显示信息"""
return self.id
2、生成models.py文件的模型变更记录让django知道
python manage.py makemigrations
3、创建表结构
python manage.py migrate
4、字段类型和选项
4.1 数据库表名
模型类如果未指明表名,Django默认以 小写app应用名_小写模型类名 为数据库表名。
可通过db_table 指明数据库表名。
4.2 关于主键
django会为表创建自动增长的主键列,每个模型只能有一个主键列,如果使用选项设置某属性为主键列后django不会再创建自动增长的主键列。
默认创建的主键列属性为id,可以使用pk代替,pk全拼为primary key。
4.3 属性命名限制
* 不能是python的保留关键字。
* 不允许使用连续的下划线,这是由django的查询方式决定的。
* 定义属性时需要指定字段类型,通过字段类型的参数指定选项,语法如下:
属性=models.字段类型(选项)
4.4 字段类型
4.5 选项
4.6 外键
在设置外键时,需要通过on_delete选项指明主表删除数据时,对于外键引用表数据如何处理,在django.db.models中包含了可选常量:
CASCADE 级联,删除主表数据时连通一起删除外键表中数据
PROTECT 保护,通过抛出ProtectedError异常,来阻止删除主表中被外键应用的数据
SET_NULL 设置为NULL,仅在该字段null=True允许为null时可用
SET_DEFAULT 设置为默认值,仅在该字段设置了默认值时可用
SET() 设置为特定值或者调用特定方法,如:
from django.conf import settings
from django.contrib.auth import get_user_model
from django.db import models
def get_sentinel_user():
return get_user_model().objects.get_or_create(username='deleted')[0]
class MyModel(models.Model):
user = models.ForeignKey(
settings.AUTH_USER_MODEL,
on_delete=models.SET(get_sentinel_user),
)
* DO_NOTHING 不做任何操作,如果数据库前置指明级联性,此选项会抛出IntegrityError异常