Django models 操作
8.7 model 操作
- models.py
from enum import unique
from django.db import models
# Create your models here.
class Meta:
# 唯一联合索引
unique_together = ['day', 'hour']
# 普通联合索引
index_together = ['username', 'phone']
class TestModel(models.Model):
id = models.AutoField(primary_key=True)
# unique=True 唯一索引不允许重复 blank=False 该值不允许为空
username = models.CharField(max_length=20, unique=True, blank=False)
age = models.SmallIntegerField(default=0)
phone = models.SmallIntegerField(db_index=True, blank=True, default=0)
email = models.EmailField(default='')
info = models.TextField(blank=True)
# auto_now_add=Tru 创建时添加时间 该时间只会更新一次
create_time = models.DateTimeField(auto_now_add=True)
# 更新操作将会修改时间
update_time = models.DateTimeField(auto_now=True)
- 数据模型初始化
makemigrations
- 数据库同步数据模型 多次同步会覆盖之前的数据与表结构
migrate
8.8 数据库表关系
-
一对一表关系
仅在两张表中,表 1 的 a 这一行的数据和表 2 的 a 这行数据有联系 ,且表 2 的 a 行数据也只会和表 1 的 a 行有关系
-
一对多表关系
表 1 的第 a 行数据和多个表的多行数据都会有所关系,而多个表中的多行数据与表 1 的 a 行数据有关系,且只有和表 1 的第 a 行数据有所关联
-
多对多表关系
表 1 中的第 a 行数据可以与表 2 中的一行或多行相互联系,表 2 中的 a 行也可以和表 1 中的一行或多行相互关联
9. 数据库应用
9.1 models.py 数据模型建立
from enum import unique
import blank as blank
from django.db import models
# Create your models here.
class User(models.Model):
id = models.IntegerField(primary_key=True)
# unique=True 唯一索引不允许重复 blank=False 该值不允许为空
username = models.CharField(max_length=20, unique=True, blank=False)
age = models.SmallIntegerField(default=0)
phone = models.SmallIntegerField(db_index=True, blank=True, default=0)
email = models.EmailField(default='')
info = models.TextField()
# auto_now_add=Tru 创建时添加时间 该时间只会更新一次
create_time = models.DateTimeField(auto_now_add=True)
# 更新操作将会修改时间
update_time = models.DateTimeField(auto_now=True)
class Meta:
# 普通联合索引
index_together = ['username', 'phone']
# 一对一表关系 (需要设置 on_delete)
class Userprofile(models.Model):
id = models.IntegerField(primary_key=True)
# 如果要声明 on_delete 那么 blank null 都要为 True
user = models.OneToOneField(User, blank=True, null=True, on_delete=models.SET_NULL)
birthday = models.CharField(max_length=50, blank=True, default='')
# 一对多表关系 (需要设置 on_delete)
class Userlog(models.Model):
id = models.IntegerField(primary_key=True)
user = models.ForeignKey(User, related_name='user_log', blank=True, null=True, on_delete=models.SET_NULL)
content = models.TextField()
created_time = models.DateTimeField(auto_now_add=True)
# 多对多关系 (不用设置 on_delete)
class Group(models.Model):
id = models.IntegerField(primary_key=True)
user = models.ManyToManyField(User, related_name='group')
name = models.CharField(max_length=20)
created_time = models.DateTimeField(auto_now_add=True)
- 数据模型初始化
makemigrations
- 数据库同步数据模型
migrate
- 成功