python_day18 Django表关系
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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 }}
以上是关于python_day18 Django表关系的主要内容,如果未能解决你的问题,请参考以下文章
Django:在运行单元测试之前创建测试表时“无法添加外键约束”