django5-书籍与出版社关联外键
1.外键相关
一对多的概念 ,这里是一个出版社对应本书籍 ! 设计表使用model
models.ForeignKey('关联一', on_delete=models.CASCADE) #给多设置外键 ,关联一 ,设置级联删除当一的内容被删除 ,所关联的多都被删除
from django.db import models # Create your models here.
class presslist(models.Model):
name = models.CharField(max_length=32) def __str__(self):
return self.name class Book(models.Model):
name = models.CharField(max_length=32)
p_id = models.ForeignKey('presslist', on_delete=models.CASCADE)
2.urls.py代码
两套增删改查
from django.conf.urls import url
from app1 import views urlpatterns = [
url(r'^press/list/', views.presslist, name='presslist'),
url(r'^press/del/(\d+)/', views.pressdel, name='pressdel'),
url(r'^press/add/', views.pressadd, name='pressadd'),
url(r'^press/edit/(?P<edit_id>\d+)/', views.pressedit1.as_view(), name='pressedit'), url(r'^book/list/', views.booklist, name='booklist'),
url(r'^book/del/(\d+)/', views.bookdel, name='bookdel'),
url(r'^book/add/', views.bookadd, name='bookadd'),
url(r'^book/edit/(\d+)/', views.bookedit, name='bookedit'), ]
3.views视图函数
两套视图函数
重点的 :models.Book.objects.create(name=book_name, p_id_id=press_id) ,其中创建书籍记录需要关联出版社 ,这里面必须是从出版社表取数据p_id_id
from django.shortcuts import render, redirect, reverse, HttpResponse
from django.views import View
from app1 import models
import time
import functools
from django.utils.decorators import method_decorator # Create your views here. def presslist(request):
msg_all = models.presslist.objects.all()
return render(request, 'cbs.html', {'msg': msg_all}) def pressadd(request):
if request.method == 'POST':
press_name = request.POST.get('name')
models.presslist.objects.create(name=press_name)
return redirect(reverse('presslist'))
return render(request, 'cbsadd-edit.html') def pressdel(request, del_id):
print(del_id, type(del_id))
models.presslist.objects.get(pk=del_id).delete()
return redirect(reverse('presslist')) def pressedit(request, edit_id, test_id):
obj = models.presslist.objects.get(pk=edit_id)
print(test_id, edit_id)
msg = ''
if request.method == 'POST':
obj.name = request.POST.get('name') if models.presslist.objects.filter(name=obj.name):
msg = '已存在' if not obj.name:
msg = '不能为空' if not models.presslist.objects.filter(name=obj.name) and obj.name:
obj.save() return redirect(reverse('presslist'))
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) class pressedit1(View): def get(self, request, edit_id, msg=''):
obj = models.presslist.objects.get(pk=edit_id)
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg}) def post(self, request, edit_id):
msg = ''
obj = models.presslist.objects.get(pk=edit_id)
obj.name = request.POST.get('name')
if models.presslist.objects.filter(name=obj.name):
msg = '已存在'
if not obj.name:
msg = '不能为空'
if not models.presslist.objects.filter(name=obj.name) and obj.name:
obj.save()
return redirect(reverse('presslist'))
return self.get(request, edit_id, msg) def booklist(request):
msg_all = models.Book.objects.all()
return render(request, 'cbs.html', {'msg': msg_all}) def bookdel(request, del_id):
models.Book.objects.get(pk=del_id).delete()
return redirect(reverse('booklist')) def bookadd(request):
msg_all = models.presslist.objects.all()
if request.method == 'POST':
book_name = request.POST.get('name')
press_id = int(request.POST.get('pid'))
models.Book.objects.create(name=book_name, p_id_id=press_id)
return redirect(reverse('booklist'))
return render(request, 'cbsadd-edit.html', {'msg_all': msg_all}) def bookedit(request, edit_id):
obj = models.Book.objects.get(pk=edit_id)
msg = ''
if request.method == 'POST':
obj.name = request.POST.get('name') if models.Book.objects.filter(name=obj.name):
msg = '已存在' if not obj.name:
msg = '不能为空' if not models.Book.objects.filter(name=obj.name) and obj.name:
obj.save() return redirect(reverse('booklist'))
return render(request, 'cbsadd-edit.html', {'obj': obj, 'msg': msg})
4.模板复用
cbs.html
###展示出版社 ,展示书籍列表的模板
{% extends 'base.html' %}
{% block body1 %}
<table class="text-center table table-striped table-bordered">
<tr>
<td>ID</td>
{% if msg.0.p_id %}
<td>书名</td>
<td>出版社名字</td>
{% else %}
<td>出版社名字</td>
{% endif %}
<td>操作</td>
</tr>
{% for obj in msg %}
<tr>
<td>{{ obj.pk }}</td>
<td>{{ obj.name }}</td>
{% if obj.p_id %}
<td>{{ obj.p_id.name }}</td>
<td><a href={% url 'bookedit' obj.pk %}><i class="fa fa-pencil-square-o" aria-hidden="true">   </i></a>
<a href={% url 'bookdel' obj.pk %}><i class="fa fa-remove" aria-hidden="true"></i></a></td>
{% else %}
<td><a href={% url 'pressedit' edit_id=obj.pk %}><i class="fa fa-pencil-square-o"
aria-hidden="true">   </i></a>
<a href={% url 'pressdel' obj.pk %}><i class="fa fa-remove" aria-hidden="true"></i></a></td>
{% endif %} </tr>
{% endfor %}
</table>
{% endblock %}
cbsadd-edit.html
###修改与新增的复用模板
{% extends 'base.html' %} {% block body1 %}
<form action="" method="post">
<div style="margin-left: 100px;margin-top: 50px;" class="col-md-6 ">
<input type="text" class="form-control" name="name" placeholder="{{ obj.name }}">{{ msg }}
{% if msg_all %}
<select name="pid">
{% for obj in msg_all %}
<option value="{{ obj.pk }}">{{ obj.name }}</option>
{% endfor %}
</select>
{% endif %} </div>
<div style="margin-left: 10px;margin-top: 50px;" class="col-md-2 ">
<button type="submit" class="btn btn-primary">提交</button>
</div>
</form>
{% endblock %}
django5-书籍与出版社关联外键的更多相关文章
- SQL 关联外键报错类型不匹配
如题,关联外键的时候,报错类型匹配.但是两个 类型都是int sql 如下: CREATE TABLE IF NOT EXISTS `alert_receiver_map` ( `id` INT UN ...
- hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound
hibernate项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到异常: org.hibernate.ObjectNotFoundExcept ...
- Python-多表关联 外键 级联
分表为什么分表 多表关联多表关系 ****** 表之间的关系 为什么要分表 多对一 一个外键 多对多 一个中间表 两个外键 一对一 一个外键加一个唯一约束外键约束 ****** foreign key ...
- jpa双向一对一关联外键映射
项目结构: Wife package auth.model; import javax.persistence.CascadeType; import javax.persistence.Column ...
- hibernate 多表关联外键问题无法截断表的解决办法
目前只有一个办法 就是手动清除其他表的外键关联,然后在做一个小swing单独去操作这个表,而不运行主控方相关的代码 当web运行后,外键会再次设置好
- UCML 参与者关键 与依赖关联外键
- hibernate中指定非外键进行关联
/** * 上级资源 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENT_ID", reference ...
- sqlalchemy外键关联
一.创建两张表,并关联外键 导入ForenginKey模块 # -*- coding: UTF-8 -*- from sqlalchemy import create_engine from sqla ...
- day08 外键字段的增删查改
day08 外键字段的增删查改 今日内容概要 外键字段的增删查改 正反向查询的概念 基于对象的跨表查询(子查询) 基于双下划线的跨表查询(连表操作) 聚合查询与分组查询 F查询和Q查询 前提准备 cl ...
随机推荐
- Swoole 启动一个服务,开启了哪些进程和线程?
目录 概述 代码 小结 概述 Swoole 启动一个服务,开启了哪些进程和线程? 为了解决这个问题,咱们启动一个最简单的服务,一起看看究竟启动了哪些进程和线程? 然后结合官网运行流程图,对每个进程和线 ...
- CSS属性继承
在CSS中有一些属性是可以继承的,跟继承家产一样,哎,一代一代的往下传,而有些属性就比较惨了,不能继承,只能自己来设置. 我简略的总结了一下一些可以继承和不可以继承的属性 可继承 1.字体系列属性:f ...
- 关于 Sublime Text 3 中 input 无法输入的问题
在新装的 Sublime Text 3 中,Ctrl + B 运行时会发现无法正常输入,我记录了一下我的解决方法. 相关原文可参照 https://blog.csdn.net/weixin_42116 ...
- ASP.NET MVC Action向视图传值之匿名类型
在使用ASP.NET MVC过程中想必大家都有遇到过一个问题就是我们的Action如何向视图传递匿名类型的值呢,如果不做特殊处理则无法实现. 接下来我们来看一个示例: 在我们的控制中: using S ...
- goweb-mysql连接
操作 数据库 Go 语言中的 database/sql 包定义了对数据库的一系列操作.database/sql/driver 包定义了应被数据库驱动实现的接口,这些接口会被 sql 包使用.但是 Go ...
- [browser srceen]、很多未知望大神告知、简单写了个拖拽
未知作用的有.如果也有像我1样好奇的小伙伴了解了麻烦告知 // console.log(window.screen.availWidth);//未知效果 // console.log(window.s ...
- Cobalt Strike系列教程第一章:简介与安装
Cobalt Strike是一款超级好用的渗透测试工具,拥有多种协议主机上线方式,集成了提权,凭据导出,端口转发,socket代理,office攻击,文件捆绑,钓鱼等多种功能.同时,Cobalt St ...
- SAP MCH1表和MCHA表更新逻辑
SAP MCH1表和MCHA表更新逻辑 笔者所在的A项目里,批次是在material level 唯一, 意味着不同物料号可以有相同的批次号,只要物料号+批次号组合是唯一的即可. SE11 看MCH1 ...
- OpenCV:图像的水平、垂直、水平垂直翻转
首先导入相关的库: import cv2 import matplotlib.pyplot as plt 自定义展示图片的函数: def show(image): plt.imshow(image) ...
- bay——Oracle RAC集群体系结构.docx
Oracle RAC集群体系结构 ————bayaim 2018年10月22日13:33 https://blog.51cto.com/ixdba/862207 一. Oracle集群体系结构 O ...