### 11.3 图书管理系统 #### 11.3.1 出版社的管理 展示: - 设计URL - ```python urlpatterns = [ url(r‘^publisher_list‘,views.publisher_list) ] ``` - 写函数 - ```python from django.shortcuts import render from app01 import models #展示出版社 def publisher_list(request): #从数据库中查询到出版社的信息 all_publishers = models.Publisher.object.all() #返回到一个包含出版社信息的页面 return render(request,‘publisher_list.html‘,{‘all-publishers‘:all_publishers}) ``` - 写模板 - ```html <table boder = ‘1‘> <thead> <th>序号</th> <th>ID</th> <th>名称</th> </thead> {% for publisher in all_publishers %} <tr> <td>{{forloop.counter}}</td> #自带的功能,生成对应序号 <td>{{publisher.pk}}</td> #pk就是primary key主键 <td>{{publisher.name}}</td> </tr> </table> ``` 新增: ```python obj = models.Publisher.object.create(name=publisher_name) ``` 删除 ```python obj_list = models.Publisher.objects.filter(pk=pk) obj_list.delete() obj = models.Publisher.objecct.get(pk=pk) obj.delete() ``` 编辑 ```python #修改数据 #首先要获取数据 obj = models.Publisher.objects.filter(name) # 不考虑重复、空值等情况 obj.name = publisher_name obj.save ``` #### 11.3.2 书籍管理 ```python class Book(models.Model): title = models.CharField(max_length=32) pub = models.ForeignKey(‘Publisher‘,on_delete=models.CASCADE) #级连删除,一个表删除,另一个对应的也会删除 on_delete的参数:models.CASCADE models.SET_DEFAULT models.SET_null ``` 查询: ```python all_book = models.Book.objects.all() for book in all_book: print(book.title) print(book.pub) #所关联的出版社对象 print(book.pub.pk) #查id 多了一次查询 print(book.pub_id) #支架在book表中查出的ID print(book.pub.name) ``` 新增: ```python models.Book.object.create(title=book_name,pub=出版社的对象) models.Book.object.create(title=book_name,pub_id=pub_id) ``` 删除: ```python ps = request.get(‘id‘) models.Book.object.filter(pk=pk).delete() ``` 编辑: ```html {% if book_obj.pub == publisher%} <option selected value="{{publisher.pk}}">{{publisher.name}}</option> {% else %} <option value="{{publisher.pk}}">{{publisher.name}}</option> {% endif %} ``` ```python #修改数据 book_obj.title = book_name book.obj.pub = models.Publisher.objects.get(pk=pub_id) book_obj.save() ``` #### 11.3.3 作者管理 1.创建作者表 ```python class Author(models.Model): name = models.CharField(max_length=32) book = models.ManyToManFieldy(‘Book‘) ``` 2.展示 ```python #展示作者 def author_list(request): #查询到所有对象 all_author = models.Author.object.all() return render(request,‘author_list.html‘,{‘all_author‘:all_author}) ``` ```html #写模板 {% for author in all_author%} <tr> <td>{{forloop.counter}}</td> <td>{{author.pk}}</td> <td>{{author.name}}</td> <td> {% for book in author.book.all%} {% if forloop.last%} 《{{book.title}}》 {% else %} 《{{book.title}}》 {%endif%} {%endfor%} </td> </tr> {%endfor%} ``` 3.增加 ```python author_obj = models.Author.objects.create(name=author_name) #只插入到book表中的内容 author_obj = models.set(book) #设置作者和书籍的多对多的关系 ``` 4.修改 ```python book = request.POST.getlist(‘book‘) #获取多个值得时候要用getlist #修改对象的数据 author_obj.name = name author_obj.save() #多对多的关系 author_obj.book.set(books) #每次重新设置 ``` ##### 11.3.3.1 django设置多对多关系的三种方法 1.django帮助我们生成第三张表 ```python class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField(‘Book‘) # 不在Author表中生产字段,生产第三张表 ``` 2.自己创建第三场表 ```python class AuthorBook(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) book = models.ForeignKey(Book, on_delete=models.CASCADE) date = models.DateField() ``` 3.自建的表和ManyToMany联合使用 ```python class Author(models.Model): name = models.CharField(max_length=32) books = models.ManyToManyField(‘Book‘,through=‘AuthorBook‘) # 不在Author表中生产字段,生产第三张表 class AuthorBook(models.Model): author = models.ForeignKey(Author, on_delete=models.CASCADE) book = models.ForeignKey(Book, on_delete=models.CASCADE) date = models.DateField() ```
原文地址:https://www.cnblogs.com/doraemon548542/p/11595406.html
时间: 2024-10-10 04:36:18