zoukankan      html  css  js  c++  java
  • doraemon的python(大更新) 实例讲解 图书管理系统的配置和应用

    ### 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()
    ```
  • 相关阅读:
    7.25
    7.24
    7.23
    7.22
    输入语句/条件运算符
    flowLayoutPanel1设置内容随着鼠标滚动而滚动
    dataGridView读取xml文件
    读文本内容 写入文本内容 创建复制文本
    cmd.ExecuteScalar 和配置连接设置
    $.ajax async同步加载
  • 原文地址:https://www.cnblogs.com/doraemon548542/p/11595406.html
Copyright © 2011-2022 走看看