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)
    

image-20220525163147622

  • 数据模型初始化
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

  • 成功

image-20220526091720332

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

她似晚风般温柔789

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值