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">&nbsp&nbsp&nbsp</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">&nbsp&nbsp&nbsp</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-书籍与出版社关联外键的更多相关文章

  1. SQL 关联外键报错类型不匹配

    如题,关联外键的时候,报错类型匹配.但是两个 类型都是int sql 如下: CREATE TABLE IF NOT EXISTS `alert_receiver_map` ( `id` INT UN ...

  2. hibernate-取消关联外键引用数据丢失抛异常的设置@NotFound

    hibernate项目里面配了很多many-to-one的关联,后台在查询数据时已经作了健全性判断,但还是经常抛出对象找不到异常: org.hibernate.ObjectNotFoundExcept ...

  3. Python-多表关联 外键 级联

    分表为什么分表 多表关联多表关系 ****** 表之间的关系 为什么要分表 多对一 一个外键 多对多 一个中间表 两个外键 一对一 一个外键加一个唯一约束外键约束 ****** foreign key ...

  4. jpa双向一对一关联外键映射

    项目结构: Wife package auth.model; import javax.persistence.CascadeType; import javax.persistence.Column ...

  5. hibernate 多表关联外键问题无法截断表的解决办法

    目前只有一个办法 就是手动清除其他表的外键关联,然后在做一个小swing单独去操作这个表,而不运行主控方相关的代码 当web运行后,外键会再次设置好

  6. UCML 参与者关键 与依赖关联外键

  7. hibernate中指定非外键进行关联

    /** * 上级资源 */ @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "PARENT_ID", reference ...

  8. sqlalchemy外键关联

    一.创建两张表,并关联外键 导入ForenginKey模块 # -*- coding: UTF-8 -*- from sqlalchemy import create_engine from sqla ...

  9. day08 外键字段的增删查改

    day08 外键字段的增删查改 今日内容概要 外键字段的增删查改 正反向查询的概念 基于对象的跨表查询(子查询) 基于双下划线的跨表查询(连表操作) 聚合查询与分组查询 F查询和Q查询 前提准备 cl ...

随机推荐

  1. 计算机组成原理——DMA存取方式

    DMA(Direct Memory Access)直接存储器存取 高速大容量存储器和主存之间交换时,若采用程序直接传送或程序中断传送的方式,则会有如下问题发生.    1)采用程序直接传送,主机工作效 ...

  2. .NET轻松实现支付宝服务窗网页授权并获取用户相关信息

    前言: 最近在开发一个商业街区的聚合扫码支付功能,其中需要用到的有支付宝,微信两种支付方式,当然对于开发微信支付而已作为自己的老本行已经比较熟悉了,然而对于我来说支付宝支付还是头一次涉及到.这次项目中 ...

  3. 基于Spring Boot+Spring Security+JWT+Vue前后端分离的开源项目

    一.前言 最近整合Spring Boot+Spring Security+JWT+Vue 完成了一套前后端分离的基础项目,这里把它开源出来分享给有需要的小伙伴们 功能很简单,单点登录,前后端动态权限配 ...

  4. GROUP BY中的WITH CUBE、WITH ROLLUP原理测试及GROUPING应用

    前几天,看到一个群友用WITH ROLLUP运算符.由于自个儿没用过,看到概念及结果都云里雾里的,所以突然来了兴趣对生成结果测了一番. 一.概念: WITH CUBE:生成的结果集显示了所选列中值的所 ...

  5. Java每日一面(Part1:计算机网络)[19/10/21]

    作者:故事我忘了¢个人微信公众号:程序猿的月光宝盒 1.UDP简介 1.1UDP报文结构: ​ Source Port:源端口 Destination Port:目标端口 Length:数据包长度 C ...

  6. CAD转PDF的软件哪个比较好用?用这两个很方便

    大家都知道编辑CAD图纸是需要借助CAD制图软件来进行绘制的,而且CAD制图软件很多的设计师们都在使用.但是CAD中的图纸格式为dwg格式的,不想要使用CAD软件来查看图纸的话,就需要将CAD转换成P ...

  7. ES6 -箭头函数 ,对象的函数解构

    ES6 -箭头函数: //es6 中的箭头函数和扩展 //es5的写法 // function add(a,b){ // return a + b; // } // add(1,2); //3 fun ...

  8. 11.JavaCC官方入门指南-例6

    例6:计算器--添加括号.一元运算符和历史记录 1.calculator3.jj   我们只需要再添加一些特色,就可以得到一个可用的四则运算计算器.在这一版的修改中 ,我们将使得程序可以接收括号.负值 ...

  9. Deepin 15.9系统直接运行exe运行程序

    以下为你介绍在深度Deepin 15.9 Linux操作系统下直接运行exe文件的方法,此方法基于deepin-wine实现,经测试,一些exe文件是可以正常打开的,但部分可能会出现无法使用的情况,但 ...

  10. python中copy()和deepcopy()详解

    **首先直接上结论: —–我们寻常意义的复制就是深复制,即将被复制对象完全再复制一遍作为独立的新个体单独存在.所以改变原有被复制对象不会对已经复制出来的新对象产生影响.—–而浅复制并不会产生一个独立的 ...