Django5.1
创建模型
建立下列模型
# 作者表 class Author(models.Model): name=models.CharField( max_length=32) age=models.IntegerField() # authorDetail=models.OneToOneField(to="AuthorDetail",to_field="nid",on_delete=models.CASCADE) authorDetail=models.OneToOneField(to="AuthorDetail",) # 取消级联 on_delete=models.SET_NULL # 默认是级联的 on_delete=models.CASCADE 二以上版本是需要手动添加 def __str__(self): return self.name # 作者详细信息表 class AuthorDetail(models.Model): birthday=models.DateField() # 出生日期 # telephone=models.BigIntegerField() # 电话 telephone=models.CharField(max_length=12) # 电话 addr=models.CharField( max_length=64) def __str__(self): return self.addr # 出版社表 class Publish(models.Model): name=models.CharField( max_length=32) city=models.CharField( max_length=32) email=models.EmailField() def __str__(self): return self.name # 书籍表 class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField( max_length=32) publishDate=models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2) publish=models.ForeignKey(to="Publish",to_field="id",on_delete=models.CASCADE) authors=models.ManyToManyField(to='Author',) def __str__(self): return self.title
添加表记录
一对一添加记录
# 方式一 # 先创建关系数据 绑定作者信息进行添加 publish_obj = models.AuthorDetail.objects.create( birthday='1997-02-13', telephone='17233145632', addr='齐齐哈尔', ) models.Author.objects.create( name='张起灵', age=88, authorDetail=publish_obj ) # 方式二 # 绑定已有的数据,先找到,在创建 obj = models.AuthorDetail.objects.filter(addr='东银').first() models.Author.objects.create( name='西楚霸王', age=45, authorDetail=obj, )
一对多添加记录
# 方式一 obj = models.Publish.objects.get(pk=3) models.Book.objects.create( title='帅总修仙传', publishDate='2011-11-21', price=124, publish=obj, ) # 方式二 obj = models.Publish.objects.get(pk=2) models.Book.objects.create( title='三胖修仙传', publishDate='2013-11-21', price=164, publish_id=obj.pk, )
多对多添加记录
# 方式一 常用 book_obj = models.Book.objects.get(pk=14) book_obj.authors.add(*[7,8]) # 添加两位作者 # 方式二 # 先找到作者1和作者2 然后对作者对象进行打散添加 author1 = models.Author.objects.get(pk=12) author2 = models.Author.objects.get(pk=13) book_obj = models.Book.objects.get(pk=15) book_obj.authors.add(*[author1,author2])
删除表记录
# 一对一 表一外键关联表二 表一删除 不影响表二 表二删除会影响表二(连带删除) models.AuthorDetail.objects.get(id=3).delete() models.Author.objects.get(id=2).delete() # 一对多 models.Publish.objects.get(id=1).delete() models.Book.objects.get(nid=6).delete() # 多对多 表关系删除 book_obj = models.Book.objects.get(nid=12) book_obj.authors.remove(8) # 删除一条 book_obj.authors.remove(*[8,9]) # 删除多条 book_obj.authors.clear() # 删除所有关系(清空) book_obj.authors.set("9") # 清空再修改 book_obj.authors.set(['9','10']) # 清空再修改