• ORM 多表作业


    项目路由控制器 app01.urls.py

    from app01.views import *
    
    urlpatterns = [
        path("addbook/",book_add),
        path("sqlinsert/",sql_insert),
        path("search/",book_search),
        re_path("edit/(d+)/$",book_edit),
        re_path("delete/(d+)/$",book_delete)
    ]
    

    项目视图控制器 app01.view.py

    from app01 import models
    
    def book_add(request):
        if request.method=="POST":
            #如果递交方式为post,获取新增数据的内容 有些内容是id
            bk_name = request.POST.get("bk_name")
            bk_price = request.POST.get("bk_price")
            bk_pub_date = request.POST.get("bk_pub_date")
            publish = request.POST.get("publish_id")
            # getlist 是因为作者是多选项,我们如果用get只能获取一个值,但是应该获取的是一个列表
            author = request.POST.getlist("author_lists")
    
            #把数据都写入数据库
            bk = models.Book.objects.create(title=bk_name,price=bk_price,pub_date=bk_pub_date,publish_id=publish)
            bk.author.add(*author)
            return redirect("/my/addbook/")
            # return HttpResponse(bk_pub_date)
        pubs = models.Publish.objects.all()
        auths = models.Author.objects.all()
        return render(request,"book_add.html",{"pubs":pubs,"auths":auths})
    
    
    def sql_insert(request):
        # 添加出版社数据
        pub_lists = ["浙江出版社","山东出版社","济南出版社","南京出版社","北京出版社","天津出版社","深圳出版社"]
        pub=[models.Publish.objects.create(name=i) for i in pub_lists]
        # 添加作者详情表
        auth_detail = models.Author_detail.objects.create(city="济南",add="济南区")
        auth_detail = models.Author_detail.objects.create(city="山东",add="山东区")
        auth_detail = models.Author_detail.objects.create(city="浙江",add="浙江区")
        auth_detail = models.Author_detail.objects.create(city="南京",add="南京区")
        auth_detail = models.Author_detail.objects.create(city="深圳",add="深圳区")
        auth_detail = models.Author_detail.objects.create(city="天津",add="天津区")
        auth_detail = models.Author_detail.objects.create(city="北京", add="北京区")
        #添加作者详情,先根据城市获取作者详情表的id,再添加到作者表中
        #让作者表中的auth_detail和详情ID产生关联
        city_lists = ["浙江 ","山东","济南","南京","天津","深圳","北京"]
        auth_name = ["alex","blex","clex","dlex","elex","flex","glex"]
        for idx,city in enumerate(city_lists):
            au_detail = models.Author_detail.objects.get(city=city)
            auth1 = models.Author.objects.create(name=auth_name[idx],age=19+idx,author_detail=au_detail)
    
    
        return HttpResponse("数据数据初始化添加完毕")
    
    def book_search(request):
        bks = models.Book.objects.all()
    
        return render(request,"book_search.html",{"bks":bks})
    
    
    def book_edit(request,idx):
        bk = models.Book.objects.get(pk = idx)
        publishs = models.Publish.objects.all()
        auths = models.Author.objects.all()
        if request.method=="POST":
            bk_name = request.POST.get("bk_name")
            bk_price = request.POST.get("bk_price")
            bk_pub_date = request.POST.get("bk_pub_date")
            publish = request.POST.get("publish")
            auths = request.POST.getlist("author_lists")
            models.Book.objects.filter(pk=idx).update(title=bk_name,price = bk_price,pub_date = bk_pub_date,publish_id = publish)
            # bk.author.clear()
            # bk.author.add(*auths)
            # set等于上面2步,先清除对象的关闭,再新建新的关系表
            bk.author.set(auths)
    
    
            return redirect("/my/search/")
            # author = bk.author.all()
            #
            # bk.update(title = bk_name)
        # print(bk.pub_date)
        return render(request,"book_edit.html",locals())
    
    
    def book_delete(request,idx):
    
        bk = models.Book.objects.filter(pk=idx)
        bk.delete()
    
        return redirect("/my/search")
    

    项目ORM模块 appo1.models.py

    from django.db import models
    
    
    # Create your models here.
    class Book(models.Model):  # 意见
        id = models.AutoField(primary_key=True)
        title = models.CharField(max_length=32)
        price = models.DecimalField(max_digits=8, decimal_places=2)
        pub_date = models.DateField()
        publish = models.ForeignKey(to="Publish", to_field="pid", on_delete=models.CASCADE)
        author = models.ManyToManyField(to="Author")
    
        def __str__(self):
            return self.title
    
    
    class Publish(models.Model):
        pid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
    
    
    class Author(models.Model):
        aid = models.AutoField(primary_key=True)
        name = models.CharField(max_length=32)
        age = models.IntegerField()
        author_detail = models.OneToOneField(to="Author_detail", to_field="aid", on_delete=models.CASCADE)
    
    
    class Author_detail(models.Model):  # 已建
        aid = models.AutoField(primary_key=True)
        add = models.CharField(max_length=32)
        city = models.CharField(max_length=32)
    

    网页book_add.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Book_add</title>
        <link rel="stylesheet" href="/static/css/bootstrap.css">
    </head>
    <body>
    <h2 class="text-center">书籍添加</h2>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-4 col-lg-4 col-sm-3  col-md-offset-4 col-lg-offset-4 col-sm-offset-5">
                <a href="/my/search" class="btn btn-success">返回查询页面</a>
                <form action="" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="add_book">书名</label>
                        <input type="text" name="bk_name" id="add_book" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="price">价格</label>
                        <input type="text" name="bk_price" id="price" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="pub_date">出版日期</label>
                        <input type="date" name="bk_pub_date" id="pub_date" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="pub_date">出版社</label>
                        <select name="publish_id" id="" class="form-control">
                            {% for pub in pubs %}
                                <option value="{{ pub.pk }}">{{ pub.name }}</option>
                            {% endfor %}
                        </select>
                        
                    </div>
                    <div class="form-group">
                        <label for="author">作者</label>
                        <select name="author_lists" id="" class="form-control" multiple>
                            {% for auth in auths %}
                                <option value="{{ auth.pk }}">{{ auth.name }}</option>
                            {% endfor %}
                        </select>
                    </div>
    
                    <div class="form-group pull-right">
                        <input type="submit" class="btn btn-success" value="提交">
                    </div>
    
                </form>
            </div>
        </div>
    
    </div>
    
    </body>
    </html>
    

    网页book_edit.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Book_add</title>
        <link rel="stylesheet" href="/static/css/bootstrap.css">
    </head>
    <body>
    <h2 class="text-center">书籍添加</h2>
    <div class="container-fluid">
        <div class="row">
            <div class="col-md-4 col-lg-4 col-sm-3  col-md-offset-4 col-lg-offset-4 col-sm-offset-5">
                <a href="/my/search" class="btn btn-success">返回查询页面</a>
                <form action="" method="post">
                    {% csrf_token %}
                    <div class="form-group">
                        <label for="add_book">书名</label>
                        <input type="text" name="bk_name" id="add_book" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="price">价格</label>
                        <input type="text" name="bk_price" id="price" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="pub_date">出版日期</label>
                        <input type="date" name="bk_pub_date" id="pub_date" class="form-control">
                    </div>
                    <div class="form-group">
                        <label for="pub_date">出版社</label>
                        <select name="publish_id" id="" class="form-control">
                            {% for pub in pubs %}
                                <option value="{{ pub.pk }}">{{ pub.name }}</option>
                            {% endfor %}
                        </select>
                        
                    </div>
                    <div class="form-group">
                        <label for="author">作者</label>
                        <select name="author_lists" id="" class="form-control" multiple>
                            {% for auth in auths %}
                                <option value="{{ auth.pk }}">{{ auth.name }}</option>
                            {% endfor %}
                        </select>
                    </div>
    
                    <div class="form-group pull-right">
                        <input type="submit" class="btn btn-success" value="提交">
                    </div>
    
                </form>
            </div>
        </div>
    
    </div>
    
    </body>
    </html>
    

    网页book_search.html

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Book_serach</title>
        <link rel="stylesheet" href="/static/css/bootstrap.css">
    </head>
    <body>
    <h2 class="text-center">书籍查询</h2>
    <div class="container-fluid">
        <div class="row">
    
            <div class="col-lg-6 col-md-5 col-sm-4 col-lg-offset-3 col-md-offset-3">
                <a href="/my/addbook/" class="btn btn-primary">新增书籍</a>
                <table class="table table-bordered table-striped">
                <thead>
                    <tr>
                        <th  class="text-center">编码</th>
                        <th  class="text-center">书籍名称</th>
                        <th  class="text-center">出版日期</th>
                        <th  class="text-center">价格</th>
                        <th  class="text-center">出版社</th>
                        <th  class="text-center">作者</th>
                        <th  class="text-center">编辑操作</th>
                        <th  class="text-center">删除操作</th>
                    </tr>
                    </thead>
                <tbody>
    {#bks是Book对象,里面的价格 书本名字可以直接通过属性获得,但是他的出版社需要通过正向查询的表名+字段获取  也就是bk.publiish.name#}
                        {% for bk in bks %}
                            <tr>
                            <td>{{ forloop.counter }}</td>
                            <td>{{bk.title}}</td>
                            <td>{{bk.pub_date|date:"Y-m-d"}}</td>
                            <td>{{bk.price}}</td>
                            <td>{{bk.publish.name}}</td>
                            <td>
    {#先通过单个bk对象获取到author字段的所有数据  也就是bk.author.all  这里all不用加大括号 因为作者和书籍是多对多关系,所以bk.author.all 获取的不是一个值,而是多个值组成的queryset,还需要再次遍历提取作者表中的name字段#}
                                {% for each_bk_author_name in bk.author.all %}
    {#这里实现的效果是作者和作者之间用逗号隔开,但是最后一个作者不需要加逗号,用forloop.last判断是否是最后一个循环,如果是不加逗号,否则模板语法后面加个逗号#}
                                    {% if forloop.last %}
                                    <span>{{each_bk_author_name.name}}</span>
                                        {% else %}
                                     <span>{{each_bk_author_name.name}},</span>
                                    {% endif %}
                                {% endfor %}
                            </td>
                            <td><a href="/my/edit/{{ bk.pk }}/" class="btn btn-info">编辑操作</a></td>
                            <td><a href="/my/delete/{{ bk.pk }}/" class="btn btn-danger">删除操作</a></td>
                            </tr>
                        {% endfor %}
                    </tbody>
    
                </table>
            </div>
        </div>
    </div>
    </body>
    </html>
    
  • 相关阅读:
    RabbitMQ-RPC版主机管理程序
    FTP
    主机管理程序
    高级FTP
    选课系统
    电子银行购物商城
    计算器
    员工信息查询系统
    工资管理系统
    三级菜单
  • 原文地址:https://www.cnblogs.com/Young-shi/p/15230601.html
Copyright © 2020-2023  润新知