6-1 构建模型
from django.db import models
# Create your models here.
# 创建产品分类表
class Type(models.Model):
id = models.AutoField(primary_key=True)
type_name = models.CharField(max_length=20)
# 创建产品信息表
class Product(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=50)
weight = models.CharField(max_length=20)
size = models.CharField(max_length=20)
type = models.ForeignKey(Type, on_delete=models.CASCADE)
# 表6-1 表字段数据类型及说明
# models.AutoField 默认生成一个名为id的字段并为int类型
# models.CharField 字符串类型
# models.BooleanField 布尔类型
# 表6-2 表字段参数及说明
# Null 如为True,字段是否可以为空
# Blank 如为True,设置在Admin站点管理中添加数据时可允许空值
# Default 设置默认值、
6-2 数据表的关系
# 一对一关系:一个表的一行数据只与另一个表的另一行数据相关
class Performer(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
nationality = models.CharField(max_length=20)
masterpiece = models.CharField(max_length=50)
class Performer_info(models.Model):
id = models.IntegerField(primary_key=True)
performer = models.OneToOneField(performer,on_delete=models.CASCADE)
birth = models.CharField(max_length=20)
elapse = models.CharField(max_length=20)
# 一对多关系:一个表的一行数据与另一个表的一到多行数据进行关联
class Performer(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
nationality = models.CharField(max_length=20)
class Program(models.Model):
id = models.IntegerField(primary_key=True)
performer = models.ForeignKey(Performer,on_delete=models.CASCADE)
name = models.CharField(max_length=20)
# 多对多关系:一个表的一行数据与另一个表的一到多行数据进行关联,同时另一个表的一行数据与一个表的一到多行数据进行关联
class Performer(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
nationality = models.CharField(max_length=20)
class Program(models.Model):
id = models.IntegerField(primary_key=True)
name = models.CharField(max_length=20)
performer = models.ManyToManyField(Performer)
6-3 数据表的读写
# 数据表的读写操作主要对数据进行增、删、改、查
# 步骤(1)从models.py中导入模型Product
# 步骤(2)对模型Product声明并实例化,生成对象p
# 步骤(3)对对象p的属性逐一赋值
# 使用update方法实现单条或多条数据的更新
# Product.objects.get(id=9).update(name='华为荣耀v9') #更新单条数据
# Product.objects.filter(name='荣耀v9).update(name='华为荣耀v9') #更新多条数据
# Product.objects.update(name='华为荣耀v9') #全部数据更新
# 实现三种删除方式的代码如下:
# Product.objects.all().delete()
# Product.objects.get(id=1).delete()
#Product.objects.filter(name='华为荣耀v9').delete()
6-4 多表查询