day64
内容回顾
1. ORM外键操作
图书表和出版社表 多对一 的关系
# 书
class Book(models.Model):
id = models.AutoField(primary_key=True) # 自增的ID主键
# 创建一个varchar(64)的唯一的不为空的字段
title = models.CharField(max_length=64, null=False, unique=True)
# 和出版社关联的外键字段
publisher = models.ForeignKey(to="Publisher")
2. 查\增\删\改操作
1. 查
book_list = models.Book.objects.all() --> 书对象的列表
i.publisher对应的是出版社的对象。
2. 增
new_book_obj = models.Book.objects.create(
title="新书的名字",
# publisher=publusher_obj, #传对象
publisher_id=7 #或者传id
)
3. 删除
models.Book.objects.get(id=10).delete()
4. 修改
book_obj = models.Book.objects.get(id=9) # 取出要修改的书
book_obj.title=request.POST.get("book_title")
book_obj.publisher_id=9
book_obj.save()
book表和author表通过第三张表 author2book 建立多对多的关系(一本书有多个作者,一个作者有多本书)。
author表多对多关联book表
1 class Publisher(models.Model): 2 id = models.AutoField(primary_key=True) 3 name = models.CharField(max_length=64, null=False, unique=True) 4 5 # 终端执行命令 6 7 class Book(models.Model): 8 id = models.AutoField(primary_key=True) 9 title = models.CharField(max_length=64, null=False, unique=True) 10 # 和出版社关联的外键字段 11 publisher = models.ForeignKey(to="Publisher") 12 13 def __str__(self): 14 return "<Book object: {}>".format(self.title) 15 16 class Author(models.Model): 17 id = models.AutoField(primary_key=True) 18 name = models.CharField(max_length=16, null=False, unique=True) 19 # 告诉ORM,我这张表是和book表是多对多的,ORM自动生成第三张表 20 book = models.ManyToManyField(to="Book") 21 22 def __str__(self): 23 return "<Author object: {}>".format(self.name) 24 25 # 自己实现一张第三张表 app01_author_book
生成的表:
其中app01_author是自动生成的,book = models.ManyToManyField(to="Book")知道了作者和书是多对多的关系 。
书与作者多对多
还是多对多的问题
request.POST.getlist() 提交的数据是多个值的时候
对应程序
添加作者
返回的是作者名字与书的列表