一对一:
models.py: OneToOneField
views.py:
从母表查询子表的数据
反向查询 res.子表表名小写.子表的字段名
从子表查询母表的数据
正向查询
res.关联字段.母表的字段名
多对多
-
models.py:
class Boy(models.Model):
class Boy(models.Model):
bname = models.CharField(max_length=32)
class b2g(models.Model):
b = models.Foreignkey("boy",null=True)
g = models.Foreignkey("girl",null=True)
-
views.py
添加记录有2种方法、
bobj = models.Boy.objects.filter(bname='雷俊').first()
gobj = models.Girl.objects.filter(gname='乔碧萝').first()
#models.Boy2Girl.objects.create(b_id=bobj.id,g_id=gobj.id)
models.Boy2Girl.objects.create(b=bobj,g=gobj)
-
查询:3种方法 3.1 自己写第三张表
#需求 查找和雷俊约会的菇凉
res = models.Boy.objects.filter(bname='雷俊').first()
love_list = res.boy2girl_set.all()
for love in love_list:
print(love.g.gname)
2.
res = models.Boy.objects.filter(b__bname='雷俊').all()
for love in res:
print(love.g.gname)
3.
res = models.boy.objects.filter(b__bname='雷俊').values('g_gname').all()
print(res)
3.2 不写第三张表,使用manytomanyField
models.py:
class Boy(models.Model):
bname = models.Charfield(max_length=32,null=True)
+
v
-
推荐:使用第一种,灵活性高,扩展性强,可控性强,第二种字段只能生成2个。
数据表类型
int
bigint
float
decimanl
text
datetime
参数:
null
defaule
primary_key
db_index
unique
db_column
class Meta:
#联合唯一索引
unique_together=[
("b","g")
]
#联合索引
index_together
django-admin:
数据列类型:
EmailField:
Filefield:上传文件
ip......
参数:
blank是否可以为空
verbose_name
分页
-
内置分页
res = Paginator(要分页的数据列表,每页显示的数据)
users = res.page(当前页码) # 当前页码的所有数据和属性
缺点:
只能将所有的页码循环展示
-
自定制分页
今日内容:
-
模板引擎
-
基本数据类型的渲染 -字符串,整数,小数 -列表 -字典 -列表套字典 自己多打印
-
母版 -后台管理布局页面(layout.html)
{% block mycontent %}
-子版页面需要继承母版页面
-
导入模块 include
{% include "XX模板.html" %}
-
和python不同的一点,python导入模块无论数量都是1个,但是include,导入几个就有几个
-
内置函数
-
自定义函数
a.在app中创建templatetags目录
b.在上述的目录中创建XXX.py
c.在XXX.py中
在XXX.py文件中的时候
from django import template
residter = temples.Library
@regiseter.filter
def my_filter(var,args):
return val+agrs
#不建议大家使用,
-
session cookie(重点,重中之重)
session将cookie的value值转为session的key值
"""
1.将客户端回写一个{session_id:'xxxxxxxx'}
2.将客户的隐私信息存在服务端的额数据库中,也就时session不存在数据库,默认放在django_session表中
{"XXXXXX":{"name":'zekai',"age":12 }}
"""
request.session['name']=username
-
中间件
-
MVC和MTV
-
csrf