django-orm的表操作.

1)表操作:

1对1的时候: 反向查表的时候,不需要_set,因为只有一个.

1对多的时候,反向查表要分情况,当你想查的表是多个时,记得要加上_set,如果反向查的是一个对象的时,就不需要加上_set.

多对多的时候,反向查表一定要加上_set,因为一定是多个值.

总结,当你反向查表的时候,如果对象是一个集合,那么就要加上_set,如果不是的话,就不需要.

 

2)

 

 

 

 

1.查询人民邮电出版社出了多少本书

>>> Book.objects.filter(publisher__name='人民邮电出版社').count()
>>> from django.db.models import *
>>> Book.objects.filter(publisher__name='人民邮电出版社').aggregate(Count('title'))

2.查询陈吉出的书总价是多少

>>> Book.objects.filter(authors__name='陈吉').aggregate(Sum('price'))

3.查询各个作者出的书的总价格是多少

>>> Book.objects.values('authors__name').annotate(Sum('price'))

4.查询各个出版社最便宜的书价是多少

>>> Book.objects.values('publisher__name').annotate(Min('price'))

 

1.annotate(*args,**kwargs):可以为QuerySet中的每个对象添加注解。可以通过计算查询结果中的每个对象所关联的对象集合,从而得出总计值(也可以是平均值或总和,等等)。

用于分组查询。

2.aggregate(*args,**kwargs):通过对QuerySet进行计算,返回一个聚合值的字典,aggregate()中每个参数都可以指定一个包含在字典中的返回值。

用于聚合查询

 

所在位置:django.db.models

1.Avg:返回所给字段的平均值

2.Count:根据所给关联字段返回被关联model的数量。

3.Max:返回所给字段的最大值

4.Min:返回所给字段的最小值

5.Sum:计算所给字段值的总和

 

posted @ 2017-11-05 23:06  forjie  阅读(261)  评论(0编辑  收藏  举报