addit
annotate() 和 values()的先后顺序
models.Score.object.annotate() 就是以 Score的id 进行分组的
models.Score.object.values(\'course\').annotate() 先values后,以course 字段的id进行分组

# 例如:
# ret = models.Score.objects.values(\'course\').annotate(Avg(\'score\')) 相当于告诉电脑以 score 里面的 course_id进行分组
# ret = models.Score.objects.annotate(Avg(\'score\')).values(\'course\',\'a\') 相当于告诉电脑以 score的sid进行分组


order_by()
order_by()里面可以放多个字段,字段的先后顺序便是排列的先后顺序
# 19、查询每门课程的平均成绩,结果按平均成绩升序排列,平均成绩相同时,按课程号降序排列;
ret = models.Score.objects.values(\'course\').annotate(a=Avg(\'score\')).order_by(\'a\', \'-course__cid\')
 
filter() 结合 Q()的使用
字段相同的情况:
1,obj.filter(cid=1,cid=2).values(\'sid\') 如果filter里面表示AND的两个字段相同,会报错
解决办法:
 obj.fiter(cid=1).filter(cid=2).values(\'sid\')


2, obj.filter(Q(cid=1) & Q(cid=2).values(\'sid) 此时不报错,但是返回空的query set
解决办法:
  obj.filter(cid=1).filter(cid=2).values(\'sid\')




分类:

技术点:

相关文章: