06 模型与数据库
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 多表查询