project目录
urls.py
from django.contrib import admin
from django.urls import path
from publisher import views
urlpatterns = [
path('admin/', admin.site.urls),
path('', views.publisher_list),
path('publisher_list/', views.publisher_list),
path('add_publisher/', views.add_publisher),
path('del_publisher/', views.del_publisher),
path('edit_publisher/', views.edit_publisher),
path('book_list/', views.book_list),
path('add_book/', views.add_book),
path('del_book/', views.del_book),
path('edit_book/', views.edit_book),
path('author_list/', views.author_list),
path('add_author/', views.add_author),
path('del_author/', views.del_author),
path('edit_author/', views.edit_author),
]
models.py
from django.db import models
class Publisher(models.Model):
pid = models.AutoField(primary_key=True)
name = models.CharField(max_length=32, unique=True)
def __str__(self):
return '{} - {}'.format(self.pid, self.name)
class Book(models.Model):
name = models.CharField(max_length=32, unique=True)
pub = models.ForeignKey('Publisher', on_delete=models.CASCADE)
class Author(models.Model):
name = models.CharField(max_length=32)
book = models.ManyToManyField('Book')
views.py
# 展示作者
def author_list(request):
# 查询所有作者
all_authors = models.Author.objects.all()
return render(request, 'author_list.html', {'all_authors': all_authors})
# 增加作者
def add_author(request):
if request.method == 'POST':
# 获取post提交的数据
author_name = request.POST.get('author_name')
books = request.POST.getlist('books')
# 存入数据库
author_obj = models.Author.objects.create(name=author_name)
author_obj.book.set(books)
# 跳转到author_list展示页面
return redirect('/author_list/')
# 查询所有书籍
all_books = models.Book.objects.all()
return render(request, 'add_author.html', {'all_books': all_books})
# 删除作者
def del_author(request):
# 获取要删除对象的id
author_id = request.GET.get('pk')
# 获取要删除的对象,并删除
models.Author.objects.filter(id=author_id).delete()
# 跳转到auth_list展示页面
return redirect('/author_list/')
# 编辑作者
def edit_author(request):
# 查询要编辑的作者对象
author_id = request.GET.get('pk')
author_obj = models.Author.objects.get(id=author_id) # 这里如果用filter就有问题
if request.method == 'POST':
# 获取提交的数据
name = request.POST.get('author_name')
books = request.POST.getlist('books')
# 修改数据库中作者的名字
author_obj.name = name
author_obj.save()
# 设置author_book数据库中的多对多关系
author_obj.book.set(books)
# 重定向到author_list页面
return redirect('/author_list/')
# 查询所有的书籍
all_books = models.Book.objects.all()
print(all_books)
return render(request, 'edit_author.html', {'author_obj': author_obj, 'all_books': all_books})
author_list.html
Title
| 序号 |
ID |
姓名 |
代表作 |
操作 |
{% for all_author in all_authors %}
| {{ forloop.counter }} |
{{ all_author.pk }} |
{{ all_author.name }} |
{% for book in all_author.book.all %}
{% if forloop.last %}
<{{ book.name }}>
{% else %}
<{{ book.name }}>,
{% endif %}
{% endfor %}
|
删除
编辑
|
{% endfor %}
add_author.html
Title
edit_author.html
Title