16 简单的图书管理系统
from django.db import models
# Create your models here.
class Book(models.Model):
title = models.CharField(max_length=32)
price = models.DecimalField(max_digits=8, decimal_places=2)
publish_time = models.DateField(auto_now_add=True)
publish = models.ForeignKey(to='Publish')
authors = models.ManyToManyField(to='Author')
def __str__(self):
return '对象:%s' % self.title
class Publish(models.Model):
name = models.CharField(max_length=32)
addr = models.CharField(max_length=64)
def __str__(self):
return '对象:%s' % self.name
class Author(models.Model):
name = models.CharField(max_length=32)
age = models.IntegerField()
author_detail = models.OneToOneField(to='AuthorDetail')
def __str__(self):
return '对象:%s' % self.name
class AuthorDetail(models.Model):
phone = models.BigIntegerField()
addr = models.CharField(max_length=32)
def __str__(self):
return '对象:%s' % self.addr
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'^$', views.home, name='hm'),
# 图书展示
url(r'^book_list/', views.book_list, name='bl'),
# 图书添加
url(r'^book_add/', views.book_add, name='ba'),
# 图书编辑
url(r'^book_edit/(\d+)/', views.book_edit, name='be'),
# 图书删除
url(r'^book_delete/(?P<delete_id>\d+)/', views.book_delete, name='bd'),
# ajax删除
url(r'^del_book/',views.del_book)
]
views.py
from django.shortcuts import render, redirect, HttpResponse, reverse
from app01 import models
from django.db.models import Q
# Create your views here.
def home(request):
return render(request, 'home.html')
def book_list(request):
book_queryset = models.Book.objects.all()
return render(request, 'book_list.html', locals())
def book_add(request):
if request.method == 'POST':
# 获取用户上传的图书数据
title = request.POST.get('title')
price = request.POST.get('price')
publish_time = request.POST.get('publish_time')
publish_pk = request.POST.get('publish_pk')
authors_pk_list = request.POST.getlist('authors_pk_list')
'''涉及到数据的校验 暂时都不考虑 后面有现成的组件可以完成'''
book_obj = models.Book.objects.create(title=title, price=price, publish_time=publish_time,
publish_id=publish_pk)
book_obj.authors.add(*authors_pk_list) # getlist获取到的是列表 而add方法只能传多个参数逗号隔开 所以使用*打散
# _url = reverse('bl')
return redirect('bl')
"""
redirect括号内支持直接写别名 能够自动反向解析
但是该功能也仅仅局限于没有无名有名分组的情况 就需要借助有reverse方法
"""
publish_queryset = models.Publish.objects.all()
author_queryset = models.Author.objects.all()
return render(request, 'book_add.html', locals())
def book_edit(request, edit_id):
if request.is_ajax():
return HttpResponse('123')
# 获取用户需要编辑的数据对象
edit_obj = models.Book.objects.filter(pk=edit_id).first()
if request.method == 'POST':
title = request.POST.get('title')
price = request.POST.get('price')
publish_time = request.POST.get('publish_time')
publish_pk = request.POST.get('publish_pk')
authors_pk_list = request.POST.getlist('authors_pk_list')
models.Book.objects.filter(pk=edit_id).update(title=title, price=price, publish_time=publish_time,
publish_id=publish_pk)
edit_obj.authors.set(authors_pk_list)