首页 / GO / 练习|Django-多表
练习|Django-多表
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了练习|Django-多表,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含7998字,纯文字阅读大概需要12分钟。
内容图文
![练习|Django-多表](/upload/InfoBanner/zyjiaocheng/1326/fd275487f9294b309e72ff9344b8895f.jpg)
models.py
from django.db import models # Create your models here.class Author(models.Model): nid = models.AutoField(primary_key=True) name=models.CharField( max_length=32) age=models.IntegerField() class Publish(models.Model): nid = models.AutoField(primary_key=True) name=models.CharField( max_length=32) city=models.CharField( max_length=32) email=models.EmailField() class Book(models.Model): nid = models.AutoField(primary_key=True) title = models.CharField( max_length=32) publishDate=models.DateField() price=models.DecimalField(max_digits=5,decimal_places=2) # 999.99# 与Publish建立一对多的关系,外键字段建立在多的一方 publish=models.ForeignKey(to="Publish",to_field="nid",on_delete=models.CASCADE) # 与Author表建立多对多的关系,ManyToManyField可以建在两个模型中的任意一个,自动创建第三张表 authors=models.ManyToManyField(to=‘Author‘,)
urls.py
from django.contrib import admin from django.urls import path,re_path from book import views urlpatterns = [ path(‘admin/‘, admin.site.urls), re_path(‘books/add/$‘, views.add_book), re_path(‘books/$‘, views.books), re_path(‘books/(\d+)/change/$‘, views.change_book), re_path(‘books/(\d+)/delete/$‘, views.delete_book), ]
在settings里边
views.py
from django.shortcuts import render,HttpResponse,redirect # Create your views here.from .models import Publish,Author,Book def add_book(request): if request.method=="POST": title=request.POST.get("title") price=request.POST.get("price") pub_date=request.POST.get("pub_date") publish_id=request.POST.get("publish_id") authors_id_list=request.POST.getlist("authors_id_list")# checkbox,select book_obj=Book.objects.create(title=title,price=price,publishDate=pub_date,publish_id=publish_id) print(authors_id_list) # [‘2‘, ‘3‘] book_obj.authors.add(*authors_id_list) return HttpResponse("success") publish_list=Publish.objects.all() author_list=Author.objects.all() return render(request,"addbook.html",{"author_list":author_list,"publish_list":publish_list}) def books(request): book_list = Book.objects.all() return render(request, "book.html",{"book_list":book_list}) def change_book(request,edit_book_id): edit_book_obj = Book.objects.filter(pk = edit_book_id).first() if request.method == ‘POST‘: title = request.POST.get(‘title‘) price = request.POST.get(‘price‘) pub_date = request.POST.get(‘pub_date‘) publish_id = request.POST.get(‘publish_id‘) authors_id_list = request.POST.getlist(‘authors_id_list‘) Book.objects.filter(pk=edit_book_id).update(title=title, price=price,publishDate=pub_date, publish_id=publish_id) # edit_book_obj.authors.clear()# edit_book_obj.authors.add(*authors_id_list) edit_book_obj.authors.set(authors_id_list) return redirect("/books/") publish_list = Publish.objects.all() author_list = Author.objects.all() return render(request, ‘editbook.html‘,{"edit_book_obj":edit_book_obj, "publish_list":publish_list, "author_list":author_list}) def delete_book(request, delete_book_id): Book.objects.filter(pk=delete_book_id).delete() return redirect("/books/")
addbook.html(添加书籍)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bs/css/bootstrap.css"> </head> <body> <h3>添加书籍</h3> <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"> <form action="" method="post"> {% csrf_token %} <div class="form-group"> <label for="">名称</label> <input type="text" name="title"class="form-control" value=""> </div> <div class="form-group"> <label for="">价格</label> <input type="text" name="price"class="form-control"> </div> <div class="form-group"> <label for="">出版日期</label> <input type="date" name="pub_date"class="form-control"> </div> <div class="form-group"> <label for="">出版社</label> <select name="publish_id" id=""class="form-control"> {% for publish in publish_list %} <option value="{{ publish.pk }}">{{ publish.name }}</option> {% endfor %} </select> </div> <div class="form-group"> <label for="">作者</label> <select type="text" name="authors_id_list" multiple class="form-control"> {% for author in author_list %} <option value="{{ author.pk }}">{{ author.name }}</option> {% endfor %} </select> </div> <input type="submit"class="btn btn-default"> </form> </div> </div> </div> </body> </html>
book.html(查看书籍)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bs/css/bootstrap.css"> </head> <body> <h3>查看书籍</h3> <div class="container"> <div class="row"> <div class="col-md-8 col-md-offset-2"> {# 边框、悬浮时变色、条纹编码 #} <a href="/books/add"class="btn btn-primary">添加书籍</a> <table class="table table-bordered table-hover table-striped"> <thead> <tr> <th>编号</th> <th>书籍名称</th> <th>价格</th> <th>出版日期 <th>出版社</th> <th>作者</th> <th>操作</th> </tr> </thead> <tbody> {% for book in book_list %} <tr> <td>{{ forloop.counter }}</td> <td>{{ book.title }}</td> <td>{{ book.price }}</td> <td>{{ book.publishDate|date:‘Y-m-d‘ }}</td> <td>{{ book.publish.name }}</td> <td> {% for author in book.authors.all %} {% if forloop.last %} <span>{{ author.name }}</span> {% else %} <span>{{ author.name }}</span>, {% endif %} {% endfor %} </td> <td> <a href="/books/{{ book.pk }}/change/"class="btn btn-warning">编辑</a> <a href="/books/{{ book.pk }}/delete/"class="btn btn-danger">删除</a> </td> </tr> {% endfor %} </tbody> </table> </div> </div> </div> </body> </html>
editbook.html(编辑书籍)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <link rel="stylesheet" href="/static/bs/css/bootstrap.css"> </head> <body> <h3>编辑书籍</h3> <div class="container"> <div class="row"> <div class="col-md-6 col-md-offset-3"> <form action="" method="post"> {% csrf_token %} <div class="form-group"> <label for="">名称</label> <input type="text" name="title"class="form-control" value="{{ edit_book_obj.title }}"> </div> <div class="form-group"> <label for="">价格</label> <input type="text" name="price"class="form-control" value="{{ edit_book_obj.price }}"> </div> <div class="form-group"> <label for="">出版日期</label> <input type="date" name="pub_date"class="form-control" value="{{ edit_book_obj.publishDate|date:‘Y-m-d‘ }}"> </div> <div class="form-group"> <label for="">出版社</label> <select name="publish_id" id=""class="form-control"> {% for publish in publish_list %} <option selected value="{{ publish.pk }}">{{ publish.name }}</option> {% if edit_book_obj.publish == publish %} {% else %} <option value="{{ publish.pk }}">{{ publish.name }}</option> {% endif %} {% endfor %} </select> </div> <div class="form-group"> <label for="">作者</label> <select type="text" name="authors_id_list" multiple class="form-control"> {% for author in author_list %} {% if author in edit_book_obj.authors.all %} <option selected value="{{ author.pk }}">{{ author.name }}</option> {% else %} <option value="{{ author.pk }}">{{ author.name }}</option> {% endif %} {% endfor %} </select> </div> <input type="submit"class="btn btn-default"> </form> </div> </div> </div> </body> </html>
原文:https://www.cnblogs.com/shengyang17/p/9695608.html
内容总结
以上是互联网集市为您收集整理的练习|Django-多表全部内容,希望文章能够帮你解决练习|Django-多表所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。