django实战教程,django培训
框架学习第六天-贝壳指令,单表基于双下划线的模糊查询,不同注意点,字段的选择属性,网址反向解析,orm多表操作创建表_ wx 62 aae 4 be 59 a 4的技术博客_博客
框架学习第六天-贝壳指令,单表基于双下划线的模糊查询,不同注意点,字段的选择属性,网址反向解析,orm多表操作创建表
壳指令命令python manage.py shell
在终端,执行上面这个指令会进入到大蟒解释器环境中,并且加载了我们当前框架项目配置环境,所以可以在当前壳使用框架内部的功能,如
从app01导入模型
模特10 .书。对象。all();
或者直接在计算机编程语言控制台里面使用上述代码也可以基于双下划线的模糊查询从app01导入模型
定义书(请求):
#都是返回查询类型
模特10 .书。对象。filter(price _ _ in=[100,200,300])#price值等于这三个里面存在的所有查询类型对象
示例:
ret=模型10 .书。对象。filter(price _ _ in=[ 20.11 , 30.11 ,])#针对小数字段要用字符串返回所有符号列表数据的查询对象
ret=模型10 .书。对象。filter(price _ _ in=[20,18])#针对漂浮物或者(同国际组织)国际组织类型要用数字
ret=模型10 .书。对象。过滤器(价格_ _ gt=100)#大于
ret=模型10 .书。对象。过滤器(价格_ _ GTE=100)#大于等于
ret=模型10 .书。对象。过滤器(price _ _ lt=100)#小于
ret=模型10 .书。对象。过滤器(价格_ _ LTE=100)#小于等于
ret=模型10 .书。对象。filter(price _ _ range=[100,200])#大于等于100,小于等于200
#针对一些字符串数据操作
#找到包含某些字符串的数据
ret=模型10 .书。对象。过滤器(title _ _ contains= python )# title值中包含大蟒返回查询集[图书:python,图书:cpython ]查询集类型
ret=模型10 .书。对象。过滤器(title _ _ icontains= python )#不区分大小写
#找到以某些字符串开头或者结尾的数据
模特。对象。过滤器(标题_ _以= py )#以什么开头
模特。对象。过滤器(title _ _ istartswith= p )#不区分大小写以什么开头
模特。对象。过滤器(标题_ _以= py )#以什么结尾
模特。对象。过滤器(title _ _ iendswith= p )#不区分大小写,以什么结尾
#日期时间类型数据的操作返回查询类型
#按照年份查下面两种写法都正确
模特10 .书。对象。过滤器(发布日期_ _年=2012年)
模特10 .书。对象。筛选器(发布日期_ _年= 2012 )
#某年某月的
模特10 .书。对象。筛选器(发布日期_ _年=2012,发布日期_ _月=7)
#查看某年某月某日
模特Book.objects.filter(发布日期_ _年=2012,发布日期_ _月=7,发布日期_ _日=12)
#只查某月
模特10 .书。对象。f升(发布日期_ _月=7)
#查询某个字段为空的数据
模特10 .书。对象。过滤器(标题_ _为空=真)#正规的
模特Book.objects.filter(title=None)查看某个对象语句的原生结构化查询语言语句方法打印(型号10 .书。对象。过滤器(title _ _ is null=True).查询)
原生结构化查询语言语句如下
选择“app 01 _ book”。《id》、《app 01 _ book》。“标题”,
` app 01 _ book `。状态,app 01 _ book。`价格`,
` app 01 _ book `。`价格2 `,` app 01 _ book `。` pub _ date `,
` app01_book`.`title2 ,` app01_book `。从` app01_book 发布
其中" app01 _ book`.`title2 "为NULLdistinct注意点课堂用书(模型。型号):
id=型号AutoField(primary_key=True) #自动,主键
.
发布=模型CharField(max_length=32)
def __str__(self):
返回自我标题价格自行定价
定义元:
ordering=[id , publish ,]
#views.py文件内容如下
#models.py文件中制定了规则,此时用去重就不生效了
obj_list=模型Book.objects.all().值(价格2 ).独特()
打印(对象列表)
#打印结果QuerySet [{price2: 100}、{price2: 200}、{price2: 300}、{price2: 200}、{price2: 100}、{price2: 100}、{price2:200}]
#配合order_by自定义规则此时会去重
obj_list=模型Book.objects.all().order_by(price2 ).值(价格2 ).独特()
print(obj _ list)#查询集[{ price 2 :100 },{price2: 200},{price2: 300}]
#当在模型类中设置默认排序字段时,当我们使用distinct方法进行重复数据删除时,已删除重复的数据将根据我们指定的排序字典进行默认重复数据删除,这将导致删除重复的结果不是我们想要的,因此我们要么不在模型类中指定排序字段。如果设置了排序字段,我们在使用distinct方法之前添加order_by方法,order_by方法中的字段是choices属性classbook (models
.
#性=模特。CharField(max_length=12)
Sex_choices=((1,男性),(0,女性)#enum枚举单选
性=模特。integer field(choices=sex _ choices,默认值=1)
Views.py文件内容
获取具有choices属性的字典数据方法。
ret=模型。Book.objects.get(id=5)
Print(ret.sex) #1获取存储在数据库中的字段数据。
print(ret . get _ sex _ display())# male,可以帮助我们在该字段数据对应的choices指定的元组中获取该数据对应的文本内容。
# sex_choices=((1,男性),(0,女性)# enum枚举单选
#性=模特。integer field(choices=sex _ choices,默认值=1)
#例如,以性别字段为例,数据库中存储的数据为1,表示男性。如果我想获取male的字符串数据,可以通过model类对象的方法直接获取。get_sex_display(),这个方法的语法是get _ model类属性name _display()auto_now_add和auto_now。
课堂展示时间(模型。型号):
id=型号。AutoField(primary_key=True)
名称=型号。CharField(max_length=32)
britday=models . datetime field(auto _ now _ add=true)#添加记录时,会自动添加创建时间。
bday=models . datetime field(auto _ now=true)#添加记录时,创建时间也可以自动添加,更新记录时,会自动更新到当前时间。
操作:
models.datetimefield中的auto _ now=True(auto _ now=True)对update方法没有影响。
模特。ShowTime.object.all()。更新(
name=刘,
)
Auto_now=True仅在使用save方法更新时生效,修改时间会自动更新。
ret=模型。ShowTime.objects.get(id=1)
刘
Ret.save()url逆向解析由于项目中不同函数对应的url路径将来可能会发生变化,所以我们给每个url路径添加一个别名,以后通过别名的逆向解析来使用这个别名对应的路径。所以,不管将来路径发生什么变化,只要别名不变,就可以通过alias=[
.
的网址(r add _ book/,浏览量。add _ book,name= add _ book ),# name属性对应的值就是这个路径的别名。
]视图中使用url反向解析的方法。首先,在视图中引入逆向分解的方法。
来自姜戈。url导入反向# url别名反向解析,我们的URL路径是通过名称别名对应的数据来解析的。
1.对于没有参数的别名
url(r^add_book/,views.add_book,name=add_book)
反向解析:反向( book_list )
2.对于包含匿名数据包的URL
url(r^book_list/v2/(\d )/(\d),views.book_list,name=book_list )
反向解析:reverse (book _ list ,args=(11,12))
3.对于具有已知组的URL
url(r^book_list/v2/(?p年\d )/(?P month \d )/,views.book_list,name=book_list )
反向解析:反向( book _ list ,kwargs={year: 2012, month: 7})在HTML文件中使用url别名进行反向解析1。对于无参数路径:
url(r^add_book,views.add_book,name=add_book)
反向解析:a href={% url add_book %} Add /a
2.对于带参数的路径:命名的和未命名的。
url(r^add_book/(\d )/(\d )/,views.add_book,name=add_book )
url(r^add_book/(?p年\d )/(?P month \d )/,views.add_book,name=add_book )
反向解析:a href= { % URL Add _ book parameter 1 parameter 2% } Add/a写入作业时存储在点数据库中的日期。要在页面的输入标签中显示原始数据,必须使用筛选日期:“Y-m-d”
Type=date id= book _ pub _ date placeholder= publication date name= book _ pub _ date value= { { edit _ obj . pub _ date date: Y-m-d } ,type= date 的输入标签Orm操作表关系介绍er图,实体关系图,navicat和powdesigner工具都可以学习。
从django.db导入模型创建多表图形
类作者(模型。型号):
#作者表
Id=models . autofield(primary _ key=true)#实际上,我们不需要在模型类中手动指定id主键字段。默认情况下,django的orm会给每个表添加一个ID字典,它将是主键。如果我们自己指定主键,就以主键为准,不会自动为你添加主键字段。
名称=型号。CharField(max_length=32)
年龄=模特。IntegerField()
#完成相关外键的写入
#ad=模型。ForeignKey(to=AuthorDetail ,to_field=id ,on_delete=models。级联)
#可以在没有to=或to_field=id 的情况下进行速记
# ad=models . foreign key( author detail ,on _ delete=models.cascade) #只是一个简单的外键关系,需要手动指定唯一约束。orm中提供了一对一的关系类,称为OneToOneField。
ad=models . onetoonfield( author detail )# foreign unique外键约束
#书籍=模型。ManyToManyField(“书”)
# models . foreign key(author detail)这个表中与外键关联的表可以不写引号,但是如果不写引号,这个外键的键表就必须写在这个外键字典中的表上。一般我们都写引号,这样就不用考虑哪个表写在上面,哪个表写在下面了。
#ad=模型。ForeignKey(AuthorDetail,on_delete=models。级联)
#第一个to=可以写有也可以不写to_field=id ,有to=的表的id字段可以自动找到。
# Django版的foreignKey具有on_delete=models属性。默认级联,所以如果要做这种级联删除模式,可以不用写这个属性,但是Django版以后,就要自己手动添加这个属性了。
#关于级联()
模特。级联级联删除;#无法设置级联更新。如果要做级联更新,可以通过原生sql添加,也就是修改表。
类AuthorDetail(模型。型号):
#作者详细信息表
生日=模特。DateFiedl()
电话=型号。CharField(max_length=24)
#通过手机号码找到默认手机号码151的开头
类发布(模型。型号):
名称=型号。CharField(max_length=64)
城市=模特。CharField(max_length=64)
课堂用书(模型。型号):
标题=模型。CharField(max_length=64)
pub_date=模型。日期字段()
价格=车型。DecimalField(max_digits=10,decimal_places=2)
pub=模特。外键(“发布”)
这个类#ForeignKey在生成数据库字段时,会自动将属性name _id作为我们的数据库字段名。
作者=模型。ManyToManyField(“作者”)
执行数据库同步指令后,#authors不会生成字段,而是帮助我们生成第三个表,也就是book表和author表多对多关系生成的第三个表book_authors表。
-
签名:代码过万,键盘坏了!
如果你觉得这篇文章对你帮助不大,记得“推荐”一下。在此感谢!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。