python_day18 Django表关系

以下内容基于上次项目基础上完成的。

urls:
views:
index.html:在上次页面基础上
{{ book_list.publisher.name }}    出版社名称即出现

一对多的添加:
urls:
views:
def index(request):
    if request.method == "POST":
        title=request.POST.get("title")
        .....
        publish_id=request.POST.get("publish_id")
        book_obj=models.Book.objects.create(title=title,...,publisher_id=publish_id) 使用字段添加表记录
        return redirect("/index/")
    publish_list=models.Publish.objects.all()
    return render(request,"add.html","publish_list":publish_list)
add.html:
<p>出版社<select name="publish" id="">
    {% for publish in publish_list %}
    <option value="{{ publish.id }}">{{ publish.name }}
    {% endfor %}    
添加页面中显示出版社名称,将出版社ID信息传送给前端页面

html页面form表单中 {{ csrf_token }}    setting中不必注释MIDDING第四行信息

单表插入数据方式2:
book_obj=models.Book(title=title,....,publisher_id=publish_id)
book_obj.save()        类实例化对象后save就可以增加表记录
一对多表插入数据方式2:
publish_obj=models.Publish.objects.filter(name="renmin")[0]
models.Book.objects.create(title=title,...,publisher=publish_obj)
#publisher 与这本书关联的出版社对象

create有返回值:插入的记录对象
模板templates之标签    if标签
urls:
views.temp:
temp.html:
<h3>TEMP
{% if n > 20 %}
<p>大于20
{% else %}    
<p>小于20
{% endif %}
obj=models.Book.objects.filter(id=1)[0]
<p>{{ obj.author.authordetail.name }}
={% with book_obj.publish.name="name" %}    with标签用法 使用name代指前面的那些
<p>{{ name }}
{% endwith %}

{% crsf_token %}    这个标签用于跨站请求爱伪站保护
<hr>
<form action="/temp/" method="post">
<p><input type="text" name="user">
<input type="submit">
{% crsf_token %}标示身份用的
for循环内 {% empty %} <p>没有响应书籍

自定义标签与过滤器的流程:
1、setting中INSTALLED_APPS检查是否有应用app01
2、在app01中templatetags包
3、templatetags创建任意.py文件
4、from django import template
from django.utils.safestring import make_safe
register=template.library()    #register的名字是固定的,不可改变
@register.filter    自定义标签
def multi(x,y):
    return x*y;
temp.html 将python函数与html模板结合起来了
5、{% load my_tag.py %}    <p>{{ a|multi:12 }}    即a*12

自定义过滤器与自定义标签的流程一模一样。
仅装饰器不同
@register.simple_tag
def multi_tag(x,y):
    return x*y;
{% load my_tag.py %} <p>{% multi_tag 3 5 %}

自定义标签和自定义过滤器区别:
1、自定义标签只能接收到2个参数
2、自定义过滤器 可接受任意参数 不能与if等使用

html母版与继承
template下创建母版base.html
{% block content %}
{% endblock %}
new_index.html:
{% extends "base.html" %}
{% block content %}
扩展内容
{% endblock %}
追加内容 {{ block.super }}

时间: 2024-08-30 18:24:15

python_day18 Django表关系的相关文章

Django表关系的实现

1.首先创建以下5张表模型,表之间的以应关系如下: 2.模型类: #学院表 class Department(models.Model): d_id = models.AutoField(primary_key=True) d_name = models.CharField(max_length=30) def __str__(self): return 'Department<d_id=%s,d_name=%s>' %(self.d_id,self.d_name) #学生表 class St

Django orm关系表的创建 、路由层以及视图层

一.Django 表关系的创建 1.表的对应关系 一对多 多对多 一对一 2.如何判断表的对应关系 利用换位思考的方式,分别站在两张表的角度上去思考 这里比如我们以图书管理系统为例来创建几个简单的表 图书表 出版社表 作者表 为了方便演示,这里我们就强行规定了表之间的关系: 图书和出版社是一对多的外键关系,一对多外键关系 将外键字段建在多的哪一张表上 图书与作者之间是多对多的外键关系,多对多的外键关系 外键字段无论建在那张表都可以,但是推荐你建在查询频率高的那张    表上 作者与作者与作者详情

Django博客项目之表关系设计

一.需要创建的表以及表之间的关系 1.User(用户信息表) User表和Blog表是一对一关系,即一个用户对应一个个人站点 2.Blog(个人站点表) 3.Category(文章分类表) Blog和Category表是一对多关系,即一个站点可以有多个分类,但是一个分类只属于一个站点 4.Tag(文章标签表) Blog和Tag表是一对多关系,即一个站点可以有多个标签,但是一个标签只属于一个站点 5.Article(文章表) User和Article表是一对多关系,即一个用户可以有多篇文章,但是一

Django 第十课 3.【ORM表关系】

#表关系 ## 一对多: 1:应用场景:比如文章和作者之间的关系.一个文章只能由一个作者编写,但是一个作者可以写多篇文章.文章和作者之间的关系就是典型的多对一的关系. 2:实现方式:一对多或者多对一,都是通过 'ForeignKey' 来实现的.还是以文章和作者的案例进行讲解. class User(models.Model): username = models.CharField(max_length=20) password = models.CharField(max_length=10

Django 批量插入数据、自定义分页器、多表关系的建立及Form组件(待更新。。。)

目  录 django批量出入数据 自定义分页器 创建多对多表关系的建立 form组件 form组件钩子函数 一.django批量出入数据 视图函数: from app01 import models # 向表中插入1000条数据 def index(request): # 方式1: # for i in range(1000): # models.Book.objects.create(title='第%s本书'%i) # book_Queryset = models.Book.objects

django之表关系的实现

1.三种表关系在Model类中的对应关系 2.以学生表.学生具体信息表.学院表.课程表为例实现上述三种表关系 分析:一个学院有多个学生,因此学院与学生的关系为一对多的关系    一个学生上多门课,一门课程有多个学生上,因此学生与课程的关系为多对多的关系    一个学生有一个具体信息表,一个具体信息表对应一个学生,因此学生与学生具体信息表为一对一的关系 3.代码实现 from django.db import models # Create your models here. class Depa

django-创建表的字段属性,表关系

表的各种属性文档:null char ..., django与之对应的文档 https://docs.djangoproject.com/en/1.11/ref/models/fields/   英文 https://yiyibooks.cn/xx/Django_1.11.6/ref/models/fields.html     中文 表关系 class Book(models.Model): headline = models.CharField('大标题', max_length=50) p

数据库 表关系设计参考

表关系设计 出版社表关系 # 出版社表 class Publisher(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max_length=128) phone = models.IntegerField() def __str__(self): return self.name # 作者表 class Author(models.Model): name = models.CharFi

059:表关系之多对多

表关系之多对多场景: 1.应用场景:比如文章和标签的关系.一篇文章可以有多个标签,一个标签可以被多个文章所引用.因此标签和文章的关系是典型的多对多的关.2.实现方式:Django 为这种多对多的实现提供了专门的 Field .叫做 ManyToManyField .还是拿文章和标签为例进行讲解. 示例代码如下: # models.py文件内容: class Tag(models.Model): tname = models.CharField(max_length=100) class Arti