VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > Python基础教程 >
  • Django框架(APP和ORM的使用)(2)

> </div> <div class="form-group"> <div class="col-sm-offset-3 col-sm-9"><button type="submit" class="btn btn-default">提交</button> </div> </div> </form>
复制代码

templates/edit_book.html:

复制代码
#action=""此处使用默认URL,即继承之前的/edit_book/?id={{ book.id }}
#或者#action="/edit_publisher/?id={{ publisher.id }}"那么就从URL中用request.GET.get()取id参数
<form class="form-horizontal" action="" method="post">
    #隐藏要编辑的书,发送id到后端,为了在后端找到要修改的图书,方便修改
    #<input type="text" value="{{ book.id }}" name="book_id" class="hide">
    
    #预先在输入框和下拉框显示要修改的图书名和出版社名
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-3 control-label">书籍名称</label>
        <div class="col-sm-9">
            <input type="text" class="form-control" id="inputEmail3" name="book_title" value="{{ book.title }}" placeholder="书籍名称">
        </div>
    </div>
    
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-3 control-label">出版社名称</label>
        <div class="col-sm-9">
        
            <select class="form-control" name="publisher_id">
             # 如果当前循环到的出版社和书关联的出版社相等,则添加selected,表示预先选中的
                {% for publisher in publisher_list %}   
                    {% if publisher == book.publisher %}
                        <option value="{{ publisher.id }}" selected>{{ publisher.name }}</option>
                    {% else %}
                        <option value="{{ publisher.id }}">{{ publisher.name }}</option>
                    {% endif %}
                {% endfor %}                      
            </select>
            
        </div>
    </div><div class="form-group">
        <div class="col-sm-offset-3 col-sm-9">
            <button type="submit" class="btn btn-default">提交</button>
        </div>
    </div>
</form>
复制代码
12.323 有关作者的函数逻辑
复制代码
# 作者列表函数
def author_list(request):
    authors = models.Author.objects.all()    # 从数据库中查询所有的作者数据,在页面上展示出来
    # author_obj = models.Author.objects.get(id=1)
    # print(author_obj.books.all())            表示id=1的作者写的所有书的对象
    return render(request, "author_list.html", {"author_list": authors})

# 添加作者函数
def add_author(request):
    if request.method == "POST":            
        new_author_name = request.POST.get("author_name") # 拿到新的作者姓名    
        models.Author.objects.create(name=new_author_name)# 去数据库中创建一个新的作者记录
        return redirect("/author_list/")                  # 创建好作者之后,让用户跳转到作者列表页面
    # 返回一个页面,让用户填写新的作者信息
    return render(request, "add_author.html")

# 删除作者函数
def delete_author(request):
    delete_author_id = request.GET.get("id")              # 从URL里面取到要删除的作者的ID    
    models.Author.objects.get(id=delete_author_id).delete()# 去数据库中找到该作者并删除
    return redirect("/author_list/")                      # 删除成功后 跳转回作者列表页面

# 编辑作者函数
def edit_author(request):
    if request.method == "POST":                  # 如果发送的是POST请求,应该拿到用户提交的数据      
        edit_author_id = request.POST.get("author_id")       # 编辑的作者id
        # 取新名字和新的书籍id
        new_author_name = request.POST.get("author_name")
        new_book_ids = request.POST.getlist("book_ids")
        # 如果提交过来的数据是多个值(多选的select/多选的checkbox)则使用getlist取列表
        # print(request.POST)
        # print(edit_author_id, new_author_name, new_book_ids)
 
        # 去编辑作者以及对应的书籍
        edit_author_obj = models.Author.objects.get(id=edit_author_id)# 拿到编辑的作者对象
        edit_author_obj.name = new_author_name                        # 修改作者姓名
        edit_author_obj.save()
        # 修改作者写的书籍
        edit_author_obj.books.set(new_book_ids)            #通过新书id更换作者对应的书籍,并提交数据库
        return redirect("/author_list/")                # 修改完成之后,跳转到作者列表页面

    # 返回一个页面,让用户编辑
    edit_author_id = request.GET.get("id")                      # 从URL里面取到要编辑作者的id参数
    edit_author_obj = models.Author.objects.get(id=edit_author_id)# 取到要编辑的作者对象
    book_list = models.Book.objects.all()                        # 获取所有的书籍对象信息
    return render(request,"edit_author.html",{"author": edit_author_obj, 
复制代码

templates/author_list.html:

复制代码
 <div class="col-md-3 col-sm-6 pull-right add-btn">
    <button data-target="#myModal" data-toggle="modal" class="btn btn-success pull-right">新增
    </button>
    <a href="/add_author/" class="btn btn-info pull-right">新页面添加 </a>
 </div><table class="table table-striped table-bordered">
    <thead>
    <tr>
        <th>序号</th>
        <th>作者姓名</th>
        <th>著作</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for author in author_list %}#{"author_list": authors}
        <tr>
            <td>{{ forloop.counter }}</td>
            <td>{{ author.name }}</td>
            <td>                               #在这一列展示这个作者关联的所有的书籍
                {% for book in author.books.all %}#书籍对象的列表
                    {% if forloop.last %}
                        《{{ book.title }}》
                    {% else %}
                        《{{ book.title }}》,
                    {% endif %}
                {% empty %}
                    暂无著作
                {% endfor %}
            </td>
            <td class="text-center">
                <a class="btn btn-info btn-sm" href="/edit_author/?id={{ author.id }}">
                <i class="fa fa-pencil fa-fw" aria-hidden="true"></i>编辑 </a>
                <a class="btn btn-danger btn-sm" href="/delete_author/?id={{ author.id }}">
                <i class="fa fa-trash-o fa-fw" aria-hidden="true"></i>删除 </a>
            </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
复制代码

templates/add_author.html:

复制代码
<form class="form-horizontal" action="/add_author/" method="post">
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-3 control-label">作者姓名</label>
        <div class="col-sm-9">
            <input type="text" class="form-control" id="inputEmail3" name="author_name"
                   placeholder="作者姓名">
        </div>
    </div><div class="form-group">
        <div class="col-sm-offset-3 col-sm-9">
            <button type="submit" class="btn btn-default">提交</button>
        </div>
    </div>
</form>
复制代码

templates/edit_author.html:

复制代码
<form class="form-horizontal" action="" method="post">#action=""默认转到当前URL
    <input type="text" value="{{ author.id }}" name="author_id" class="hide">
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-3 control-label">作者姓名</label>
        <div class="col-sm-9">
            <input type="text" class="form-control" id="inputEmail3" name="author_name"
                   value="{{ author.name }}" placeholder="作者姓名">
        </div>
    </div>
    <div class="form-group">
        <label for="inputEmail3" class="col-sm-3 control-label">著作</label>
        <div class="col-sm-9">
            <select class="form-control" name="book_ids" multiple>
                {% for book in book_list %}            #book_list 所有的书籍对象
                    #author:要编辑的作者,author.books.all:要编辑的作者的所有书籍对象
                    {% if book in author.books.all %}   # 如果当前这本书在作者写的书里面
                        <option value="{{ book.id }}" selected>{{ book.title }}</option>
                    {% else %}
                        <option value="{{ book.id }}">{{ book.title }}</option>
                    {% endif %}
                {% endfor %}
            </select>
        </div>
    </div><div class="form-group">
        <div class="col-sm-offset-3 col-sm-9">
            <button type="submit" class="btn btn-default">提交</button>
        </div>
    </div>
</form>
复制代码


相关教程
关于我们--广告服务--免责声明--本站帮助-友情链接--版权声明--联系我们       黑ICP备07002182号