Web开发(十三)Django建表、修改表

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异常

你可能感兴趣的:(Web开发(十三)Django建表、修改表)