1. 程式人生 > >005---書籍添加和編輯的提交數據

005---書籍添加和編輯的提交數據

del book index create filter 定向 style spa reat

添加和編輯兩個視圖函數只寫了get請求渲染的頁面。提交數據是post請求,所以要修改view.py。

book_add.py

 1 def book_add(request):
 2     if request.method == "POST":
 3         title = request.POST.get(title)
 4         price = request.POST.get(price)
 5         pub_date = request.POST.get(pub_date)
 6         publish_id = request.POST.get(
pubs) 7 author_id_list = request.POST.getlist(authors) # 多選用getlist取 8 book_obj = Book.objects.create(title=title, price=price, pub_date=pub_date, publish_id=publish_id) 9 book_obj.author.add(*author_id_list) 10 return redirect(index) 11 12 pub_lt = Publish.objects.all()
13 author_lt = Author.objects.all() 14 return render(request, book_add.html, {"pub_list": pub_lt, "author_list": author_lt})

說明:

  • 增加了post請求分支,如果是post請求,就走post裏面的代碼
  • 獲取前端form傳來的數據,request.POST.get(),因為author是多選,有多個值所以用getlist
  • 在數據庫中創建一條書籍記錄。綁定多對多關系,book_obj.author.add(*author_id_list)
  • 重定向到inex頁面。因為添加了別名,所以可以這樣使用

book_edit.py

 1 def book_edit(request, book_id):
 2     book = Book.objects.filter(pk=book_id).first()
 3     if request.method == "POST":
 4         title = request.POST.get(title)
 5         price = request.POST.get(price)
 6         pub_date = request.POST.get(pub_date)
 7         publish_id = request.POST.get(pubs)
 8         Book.objects.filter(pk=book_id).update(title=title, price=price, pub_date=pub_date, publish_id=publish_id)
 9         author_id_list = request.POST.getlist(authors)  # 多選用getlist取
10         
11         # 多對多更新
12         book.author.set(author_id_list)
13         return redirect(index)
14     pub_lt = Publish.objects.all()
15     authors = Author.objects.all()
16 
17     return render(request, book_edit.html, {"book": book, "pub_list": pub_lt, "author_list": authors})

說明:

  • 基本和添加的邏輯一樣,只是入庫的時候不一樣。

更改完,我們的添加和編輯就能生效了。但是代碼一樣的多啊,,,好多重復的,還有更高級的用法:

你看看就行了,這有就入庫了。

 1 def book_add(request):
 2     if request.method == POST:
 3         form = BookForm(request.POST)
 4         if form.is_valid():
 5             form.save()
 6             return redirect(/books/)
 7     form = BookForm()
 8     return render(request, book_add.html, locals())
 9 
10 
11 def book_edit(request, edit_book_id):
12     book_obj = Book.objects.filter(pk=edit_book_id).first()
13     if request.method == POST:
14         form = BookForm(request.POST, instance=book_obj)
15         if form.is_valid():
16             form.save()
17             return redirect(/books/)
18     form = BookForm(instance=book_obj)
19     return render(request, book_edit.html, locals())

005---書籍添加和編輯的提交數據