1. 程式人生 > >django實戰(四)修改資料

django實戰(四)修改資料

這節我們實現修改資料的功能,慣例,還是先上程式碼:

urls.py

urlpatterns=[
    path('curd/edit/',views.curd_edit,name='curdedit'),
    path('curd/saveedit/',views.curd_save_edit,name='curdsaveedit'),
]

views.py

def curd_edit(request):
    #我們先獲得要編輯的書籍的id
    eid=request.GET.get('eid')
    #得到書籍資訊
    book_obj=Book.objects.get(id=eid)
    publisher_obj=Publisher.objects.all()
    #蔣書記資訊和出版社資訊一起傳入到前端,應為我們出版社是和書籍關聯的,只能夠選擇,不能隨意新增。
    content = {
        'book':book_obj,
        'publisher':publisher_obj,
    }
    return render(request,'curd/edit.html',context=content)

def curd_save_edit(request):
    #判斷表單過來的是否是post請求
    if request.method == 'POST':
        #如果是,則獲取到相應的資訊
        bookid=request.POST.get("book_id")
        title=request.POST.get('title')
        publisher=request.POST.get('publisher')
        introduce=request.POST.get('introduce')
        publisher_obj=Publisher.objects.get(name=publisher)
        #因為我們是通過publisher_id進行關聯的,在更新的時候,只能插入相對應的id,不能直接插入出版社名稱
        id=publisher_obj.id
        #執行更新操作
        Book.objects.filter(id=bookid).update(title=title,publisher_id=id,introduce=introduce)
        return redirect('/curd/')

edit.html

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <link rel="stylesheet" href="/static/bootstrap/css/bootstrap.css">
    <script src="/static/bootstrap/js/bootstrap.js"></script>
    <script type="text/javascript" src="http://libs.baidu.com/jquery/1.11.1/jquery.min.js"></script>
    <script src="/static/js/curd.js"></script>
    <title>Document</title>
</head>
<body>
<div align="center" style="width: 500px;position: absolute;top: 150px;left: 400px;">
    <form method="post" class="form-horizontal" action="{% url 'person:curdsaveedit'%}">
        <input type="hidden" name="book_id" value="{{book.id}}"/>
        <div class="form-group">
            <label for="title" class="col-sm-2 control-label">title</label>
            <div class="col-sm-10">
                <input type="text" class="form-control" name="title" id="title" value="{{book.title}}">
            </div>
        </div>
        <div class="form-group">
            <label for="publisher" class="col-sm-2 control-label">publisher</label>
            <div class="col-sm-10">
                <select class="form-control" name="publisher">
                    {% for pub in publisher%}
                    <option  value="{{pub}}" {% if pub == book.publisher %} selected {% endif %}>{{pub}}</option>
                    {% endfor %}
                </select>
            </div>
        </div>
                <div class="form-group">
            <label for="introduce" class="col-sm-2 control-label">introduce</label>
            <div class="col-sm-10">
                <input type="text" name="introduce" class="form-control" id="introduce" value="{{book.introduce}}">
            </div>
        </div>
        <div class="form-group">
            <div class="col-sm-offset-2 col-sm-10">
                <button type="submit" class="btn btn-default">提交</button>
            </div>
        </div>
    </form>
</div>
</body>
</html>

啟動伺服器:

 

 點選編輯按鈕,假設我們點選id為8 的,瀏覽器地址變為http://127.0.0.1:8000/curd/edit/?eid=8

 

 對於,publisher,我們可以進行選擇:

 

 我們進行修改,然後點選提交,跳轉到顯示頁:

 

 我們可以看到相關資訊已經進行了修改。

技術總結:

1.引數的傳遞與獲取;

2.我們的publisher表和book表用外來鍵關聯,因此我們在修改publisher的時候只能夠通過選擇進行插入。我們將publisher中的name取出來傳給前端的select,通過設定{% if pub == book.publisher %} selected {% endif %}來設定預設值(也就是原本的出版社名稱);

3.得到前端傳來的資訊後要將plubisher對應的id插入到資料庫中,而不是原本的名稱;

&n