Django之多表練習

需求

實現功能:
1.添加數據--書籍名稱,價格,出版日期,出版社,作者。(出版社和作者爲可選)
2.查看書籍--編輯,刪除
	2.1點擊添加書籍,跳轉到添加書籍頁面
	2.2編輯時要保留之前的原始數據

URL配置

from django.conf.urls import url,include
from django.contrib import admin
from app03 import views

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    # 添加書籍
    url(r'^add_book/',views.add_book,name='add_book'),
    # 展示書籍
    url(r'^show_book/',views.show_book,name='show_book'),
    # 編輯書籍
    url(r'^edit_book/(\d+)/',views.edit_book,name='edit_book'),
    # 刪除書籍
    url(r'^delete_book/(\d+)/',views.delete_book,name='delete_book'),

]

一.添加書籍

views.py:

# 添加數據
def add_book(request):
    if request.method == 'GET':
        publish_obj = models.Publish.objects.all()
        authors_obj = models.Author.objects.all()
        return render(request, 'manytable/add_book.html', {'publish_obj': publish_obj, 'authors_obj': authors_obj})
    else:
        authors = request.POST.getlist('authors')
        all_data = request.POST.dict()
        del all_data['csrfmiddlewaretoken']
        del all_data['authors']
        book_obj = models.Book.objects.create(**all_data)
        book_obj.authors.add(*authors)
        return redirect('app03:show_book')

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>添加書籍</h1>
<form action="" method="post">
    {% csrf_token %}
    <div>
        書籍名稱:<input type="text" name="title">
    </div>
    <div>
        價格:<input type="text" name="price">
    </div>
    <div>
        出版日期:<input type="date" name="publishDate">
    </div>
    <div>
        出版社:
        <select name="publishs_id" id="publishs">
            {% for publish in publish_obj %}
                <option value="{{ publish.nid }}">{{ publish.name }}</option>
            {% endfor %}
        </select>
    </div>
    <div>
        作者:
        <select name="authors" id="authors" multiple>
            {% for author in authors_obj %}
                <option value="{{ author.nid }}">{{ author.name }}</option>
            {% endfor %}
        </select>
    </div>
    <div>
        <input type="submit">
    </div>
</form>
</body>
</html>

二.展示書籍

views.py:

# 展示書籍
def show_book(request):
    book_data = models.Book.objects.all()
    return render(request, 'manytable/show_book.html', {'book_data': book_data})

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>
    <a href="{% url 'app03:add_book' %}">添加書籍</a>
</h1>
<table border="1" cellpadding="10">
    <thead>
    <tr>
        <th>編號</th>
        <th>書籍名稱</th>
        <th>價格</th>
        <th>出版日期</th>
        <th>出版社</th>
        <th>作者</th>
        <th>操作</th>
    </tr>
    </thead>
    <tbody>
    {% for book_obj in book_data %}
        <tr>
        <td>{{ forloop.counter }}</td>
        <td>{{ book_obj.title }}</td>
        <td>{{ book_obj.price }}</td>
        <td>{{ book_obj.publishDate|date:'Y-m-d' }}</td>
        <td>{{ book_obj.publishs.name }}</td>
        <td>{{ book_obj.get_user_name }}</td>
        <td>
            <a href="{% url 'app03:edit_book' book_obj.nid %}">編輯</a>
            <a href="{% url 'app03:delete_book' book_obj.nid %}">刪除</a>
        </td>
        </tr>
    {% endfor %}
    </tbody>
</table>
</body>
</html>

三.編輯書籍

views.py:

# 編輯書籍
def edit_book(request, book_id):
    book_obj = models.Book.objects.filter(pk=book_id)
    if request.method == 'GET':
        book_obj = book_obj.first()
        publish_obj = models.Publish.objects.all()
        authors_obj = models.Author.objects.all()
        return render(request, 'manytable/edit_book.html',
                      {'book_obj': book_obj, 'publish_obj': publish_obj, 'authors_obj': authors_obj})
    else:
        authors = request.POST.getlist('authors')
        all_data = request.POST.dict()
        del all_data['csrfmiddlewaretoken']
        del all_data['authors']
        book_obj.update(**all_data)
        book_obj.first().authors.set(authors)
        return redirect('app03:show_book')

html文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<h1>編輯書籍</h1>
<form action="" method="post">
    {% csrf_token %}
    <div>
        書籍名稱:<input type="text" name="title" value="{{ book_obj.title }}">
    </div>
    <div>
        價格:<input type="text" name="price" value="{{ book_obj.price }}">
    </div>
    <div>
        出版日期:<input type="date" name="publishDate" value="{{ book_obj.publishDate|date:'Y-m-d' }}">
    </div>
    <div>
        出版社:
        <select name="publishs_id" id="publishs">
            {% for publish in publish_obj %}
                {% if publish.nid == book_obj.publishs.nid %}
                    <option value="{{ publish.nid }}" selected>{{ publish.name }}</option>
                    {% else %}
                        <option value="{{ publish.nid }}">{{ publish.name }}</option>
                {% endif %}
            {% endfor %}
        </select>
    </div>
    <div>
        作者:
        <select name="authors" id="authors" multiple>
            {% for author in authors_obj %}
                {% if author in book_obj.authors.all %}
                    <option value="{{ author.nid }}" selected>{{ author.name }}</option>
                    {% else %}
                    <option value="{{ author.nid }}">{{ author.name }}</option>
                {% endif %}

            {% endfor %}
        </select>
    </div>
    <div>
        <input type="submit">
    </div>
</form>
</body>
</html>

四.刪除書籍

views.py:

def delete_book(request, book_id):
    models.Book.objects.filter(pk=book_id).delete()
    return redirect('app03:show_book')
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章