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 ...
随机推荐
- SpringBoot控制台版图书借阅程序
// 实验存档... 效果图: 完整程序:https://pan.baidu.com/s/1-d1J90dkEtM0WKkABu0K0Q 提取码:hcnm DAO层代码由MyBatis Generat ...
- Java 添加Word目录的2种方法
目录是一种能够快速.有效地帮助读者了解文档或书籍主要内容的方式.在Word中,插入目录首先需要设置相应段落的大纲级别,根据大纲级别来生成目录表.本文中生成目录分2种情况来进行: 1.文档没有设置大纲级 ...
- [Vue warn]: Invalid prop: type check failed for prop "fullscreen"
fullscreen属性是Dialog弹窗中定义是否为全屏 Dialog的属性,element 官方文档中默认值是false ,于是加入是对其赋值 true,然后报了下面的错误: 解决办法:实际上并不 ...
- Python实现图片的base64编码
import base64 if __name__ == "__main__": dir='image.jpg' basef=open(dir.split('.')[0]+'_ba ...
- Docker 镜像与容器
镜像和容器的关系 容器提交 commint 作用: 根据容器生成一个新的镜像 命令格式: docker commit [OPTIONS] CONTAIN ...
- Change Field Layout and Visibility in a List View 在列表视图中更改字段布局和可见性
This lesson will guide you through the steps needed to select columns displayed in the List View. Fo ...
- 7天教你精通变大神,学CAD关键还要掌握方法,纯干货新手要看
接触CAD初期是“痛苦”的,“煎熬”的,也是充满“成就”的. 痛苦是初学者怎么都不懂,需要学习的东西很多,整个过程是有些痛苦的. 煎熬也是每个求学阶段都会遇到的状态,眼睛会了,手不会,这个状态很难受. ...
- $和jquery的关系
$和jquery的关系 $其实是jQuery的别名 一般直接使用$符号 在许多JavaScript库中都会有$作为标记.如果同时使用多个JavaScript库时难免会出现冲突. 解决方法:重新设置jQ ...
- Python Web(三)
Infi-chu: http://www.cnblogs.com/Infi-chu/ 一.Django母版渲染 1.创建母版文件 base.html <!DOCTYPE html> < ...
- Unrecognized header format %
<VirtualHost *:*> RequestHeader set "X-Forwarded-Proto" expr=%{REQUEST_SCHEME} </ ...