示例:实现对图书的添加,删除,修改操作


models.py文件内容:

from django.db import models
# Create your models here.
class Book(models.Model):
    title=models.CharField(max_length=32)
    price=models.DecimalField(max_digits=6,decimal_places=2)
    create_time=models.DateField()
    memo=models.CharField(max_length=32,default="")
    publish=models.ForeignKey(to="Publish",default=1)       #定义一对多关系,会在book表添加publish_id字段
    author=models.ManyToManyField("Author")                 #定义多对多关系,会专门生成一张book和author的关系表
    def __str__(self):
        return self.title
class Publish(models.Model):
    name=models.CharField(max_length=32)
    email=models.CharField(max_length=32)
class Author(models.Model):
    name=models.CharField(max_length=32)
    def __str__(self):return self.name


urls.py文件内容:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^books/', views.books, ),
    url(r'^addbook/', views.addbook, ),
    url(r'^edit/(\d+)', views.editbook, ),        #编辑时,需要传入编辑的书的id号
    url(r'^del/(\d+)', views.delbook, ),          #删除时,需要传入删除的书的id号
]


views.py文件内容:

from django.shortcuts import render,HttpResponse,redirect
from .models import *
def books(reqeust):
    book_list=Book.objects.all()
    return render(reqeust,"books.html",locals())
def addbook(request):
    if request.method=="POST":
        title=request.POST.get("title")
        price=request.POST.get("price")
        date=request.POST.get("date")
        memo = request.POST.get("memo")
        publish_id=request.POST.get("publish_id")
        author_id_list=request.POST.getlist("author_id_list")
        print("author_id_list",author_id_list)
        # 绑定书籍与出版社的一对多的关系
        obj=Book.objects.create(title=title,price=price,create_time=date,memo=memo,publish_id=publish_id)
        # 绑定书籍与作者的多对多的关系
        obj.author.add(*author_id_list)
        return redirect("/books/")
    else:
        publish_list=Publish.objects.all()              #得到所有出版社对象的集合
        author_list=Author.objects.all()                #得到所有作者对象的集合
        return render(request,"addbook.html",locals())
def editbook(request,id):
    if request.method == "POST":
        title=request.POST.get("title")
        price=request.POST.get("price")
        date=request.POST.get("date")
        memo = request.POST.get("memo")
        publish_id=request.POST.get("publish_id")
        author_id_list=request.POST.getlist("author_id_list")
        Book.objects.filter(id=id).update(title=title,price=price,create_time=date,memo=memo,publish_id=publish_id)
        obj =Book.objects.filter(id=id).first()
        print(author_id_list)
        # obj.author.clear()
        # obj.author.add(*author_id_list)
        obj.author.set(author_id_list)               #这一句和上面两句注释的实现效果相同,都是对编辑的书的作者重新绑定
        return redirect("/books/")                   #修改后的数据post后,跳转到books页面展示
    edit_book=Book.objects.filter(id=id).first()
    publish_list = Publish.objects.all()
    author_list=Author.objects.all()                           #]>
    author_obj=edit_book.author.all()                              #]>
    author_selected_list=[author  for author in author_list if author in author_obj]  # []
    return render(request,"editbook.html",locals())
def delbook(request,id):
    Book.objects.filter(id=id).delete()
    return redirect("/books/")

books.html展示书籍的页面内容:




    
    书籍信息
    
    


    
        
                             添加数据                                                                                               序号                               书名                               价格                               出版时间                               备注                               出版社                               作者                               操作                                操作                                                                                              {% for book in book_list %}                                                        {{ forloop.counter }}                              {{ book.title }}                              {{ book.price }}                              {{ book.create_time|date:"Y-m-d" }}                              {{ book.memo }}                              {{ book.publish.name }}                                                                {% for author in book.author.all %}                                  {{ author.name }}                                      {% if not forloop.last %}            {#实现对最后一个作者的名字后面不加逗号#}                                      ,                                      {% endif %}                                  {% endfor %}                                                                                             编辑                                                                                            删除                                                                                {% endfor %}                                                   
        
    



addbook.html添加书籍的页面内容:




    
    添加书籍
    
    


    
        
                                                  {% csrf_token %}                     

书籍名称 

                    

书籍价格 

                    

出版日期 

                    

备注 

                    

出版社                          {% for publish in publish_list %}                             {{ publish.name }}                         {% endfor %}                                             

                    

作者                          {% for author in author_list %}                             {{ author.name }}                         {% endfor %}