8.00-12
静态文件的设置:
引用bootstrap,jquery时候(),需要新建一个static文件和修改settings.py,存放其引用的代码:
1.创建一个本地文件夹存放:模板文件
2.设置setting里面的配置
STATIC_URL = ‘/static/’
STATIC_DIRS=[
os.path.join(BASE_DIR,‘文件名’)
]
ORM的多表操作:
1.添加记录
一对多:
publish_obj=Publish.object.get(nid=1)
book_obj=Book.objects.create(title=‘123’,publishdata=‘213’,publish=publish_obj)
book_obj=Book.objects.create(‘title’=‘asd’,publish_id=1)
多对多:
核心:先第三张关系表添加记录
app01_book_author
id book_id uthpr_id
1 1 2
book_obj.authors.add()
book_obj.authors.remove()
******************.clear()
******************set()
******************all()
2.基于对象的跨表查询(基于sql语句:子查询) :
正向查询/反向查询( _set):
一对多:
-----正向查询:book.publish (得到一个对象)
-----反向查询:pub_obj.book_set.all() (一个出版社有多个图书,加集合set)
多对多:
-----正向查询:book.publish.all()
-----反向查询:pub_obj.book_set.all()
一对多:
-----正向查询:book.publish
-----反向查询:pub_obj.book)
3.基于双下划线的跨表查询(基于join实现的):
1.主要是要清晰其关联的关系:使用__来简便其中 的sql语法:
4.聚合函数: agggregate
from django.db.models import Avg,Max,Sum,Min,Count
ret=Book.objects.all().agggregate(princeAvg=Avg(‘price’))
print(ret) #{‘princeAvg’:142.0}
ret=Book.objects.all().aggregate(c=Count(‘nid’))
print(ret) #{‘c’:4}
5.分组:
annotate
#以dep.id为分组,取得dep.name,与count(‘emp’)内容。
ret=dep.objetcs.values(“id”).annotate(c=Count(“emp”)).values(“name”,“c”) #以dep.id为分组,取得name
print(ret) #[ { },{ } ]
Author.objects.values(‘nid’).annotate(m=Max(‘book__price’)).values(‘name’,‘c’)
关于Author.objects.values(‘nid’).annotate(m=Max(‘book__price’))可以在后面加values,可以将
annotate看作是一个将author添加一个Max(‘book_price’)属性, 这个添加属性后的Author也可以使用
values方法。
6.filter == hiding 筛选
7.order by ==order by
8.F:查询
查询评论数大于两倍点赞数的所有书籍名称
from django.db.modeels import Q
commnetNum__lt=F(‘keepNum’)2 既F可以将 ()/-+ 可以加减乘除
9Q查询:
其他逻辑判断:
from django.db.models import Q
对于sql里面的 where 1 or 2 = Q(1) | Q(2)