使用annotate过程中遇到的报错:

  1. Sum requires values for lower and upper bounds

views里想要实现groupby效果,结果报了这个错误。后来发现是vscode自动导入了from sympy import Sum实际应该是from django.db.models import Avg, Max, Min,Sum

dc={"region_id":1}table = models.Ytdor.objects.filter(**dc)table_s = table.values('branch_id').annotate(s_ormv=Sum("ormv")).values("branch_id","s_ormv")
  1. Cannot resolve keyword ‘branch’ into field. Choices are:

报错的是以下代码:

table_s = table.values('branch').annotate(s_ormv=Sum("ormv")).values("branch","s_ormv")

因为这个表是主表,只有branch_id,外键链接到子表:
主表:
字段id:xx,branch_id:xx

子表-表名branch:
字段:id:xxx,branch:xxx

用主表字段没问题,以下代码不会报错,但是只有id,不显示外键子表的对应字段名称

table_s = table.values('branch_id').annotate(s_ormv=Sum("ormv")).values("branch_id","s_ormv")

解决办法:

遍历的方式,用外键的表filter到这个id,再返回名字

from django.http import HttpResponse
from django.shortcuts import render
from matplotlib.font_manager import json_dump# Create your views here.
import json#from sympy import Sum
from django.db.models import Avg, Max, Min,Sumfrom app1 import forms,modelsfrom django.views.decorators.csrf import csrf_exempt@csrf_exempt
def index(request):br_id = request.GET.get('branch_id')rg_id = request.GET.get('region_id')ls_id = request.GET.get('lislio_id')km_id = request.GET.get('kam_id')if rg_id:if br_id:typ = "one_branch"else:typ = "one_region"else:if br_id:typ = "one_branch"else:typ = "no_select"print(br_id)print(rg_id)print(ls_id)print(km_id)test_ajax = {"a":1,"b":"2"}form = forms.fm1()table_all = models.Ytdor.objects.all()dc = {}if rg_id:dc['region_id'] = rg_idif br_id:dc['branch_id'] = br_idif ls_id:dc['lislio_id'] = ls_idif km_id:dc['kam_id'] = km_idform = forms.fm1(data = request.GET)table = models.Ytdor.objects.filter(**dc)      #筛选#分组聚合前一个values内写的是groupby的字段,annotate里的是聚合字段,sum,avg等,最后一个values里写的是需要呈现的字段#在筛选的结果下,对分公司id分组聚合,table_s = table.values('branch_id').annotate(s_ormv=Sum("ormv")).values("branch_id","region_id","s_ormv")#在筛选的结果下,对区域id分组聚合table_rg = table.values('region_id').annotate(s_ormv=Sum("ormv")).values("region_id","s_ormv")#遍历聚合后的querysetbr_list = []br_ormv_list = []    new_dc_br = {}for i in list(table_s):        #遍历queryset,每一行queryset,并取指定字段b_id = i['branch_id']      #获取branch_idr_id = i['region_id']      #获取region_ids_orm = i["s_ormv"]        #获取求和的字段br_name = models.Branch.objects.filter(id=b_id).first()     #用id来对外键子表进行筛选,注意要加firstrg_name = models.Region.objects.filter(id=r_id).first()     #类似的取region的名称br_list.append(str(br_name))   #要用str,不然append出来会有问题br_ormv_list.append(s_orm)new_dc_br["x_axis"] = br_list       ### 放入字典new_dc_br["y_axis"] = br_ormv_list  ### 放入字典new_dc_br["rg_id"] = r_id           ### 放入字典new_dc_rg = {}rg_list = []rg_ormv_list = []for i in list(table_rg):r_id = i['region_id']rg_name = models.Region.objects.filter(id=r_id).first()rg_ormv = i['s_ormv']rg_list.append(str(rg_name))rg_ormv_list.append(rg_ormv)new_dc_rg["x_axis"] = rg_listnew_dc_rg["y_axis"] = rg_ormv_listnew_dc_rg["br_id"] = r_idif request.method == "GET":return render(request,"index.html",{'table':table,'form':form,"region_id":rg_id,"branch_id":br_id,"lislio_id":ls_id,"kam_id":km_id,"typ":typ})else:if request.POST.get("front_to_end") == "br":return HttpResponse(json.dumps(new_dc_br))if request.POST.get("front_to_end") == "rg":return HttpResponse(json.dumps(new_dc_rg))              ##根据条件不同,返回不同的json.dumpselse:return render(request,"index.html",{'table':table,'form':form,"region_id":rg_id,"branch_id":br_id,"lislio_id":ls_id,"kam_id":km_id,"typ":typ})
  1. 后端往前端传数时:js中要加引号
    <script>var dt = '{{typ|safe}}'console.log(dt)</script>
  1. echarts要定义div的长宽,不然不显示
<div class="container" id='main2' style="width: 600px;height:400px;">
</div>
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title>{% load static %}<link rel="stylesheet" href="{% static 'plugins/bootstrap-3.4.1/css/bootstrap.css' %}">
</head><body><div class="container" id="main"><form method="GET">{% csrf_token %} {% for field in form%}<label for="exampleInputName2">{{field.label}}</label> {{field}} {% endfor%}<input type="submit" value="submit"><input type="text" name="123" id="ip1"><input type="button" value="submit" id="btn"></form></div><div class="container" id='main2' style="width: 600px;height:400px;"></div><script src="{% static 'plugins/echarts.min.js'%}"></script><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js"></script><script src="{% static 'plugins/bootstrap-3.4.1/js/bootstrap.js' %}"></script><script type="text/javascript">var chartDom = document.getElementById('main2');var myChart = echarts.init(chartDom);var option;</script><script>var dt = '{{typ|safe}}';console.log(dt);var xxx = "br";if (dt == "no_select") {xxx = "rg";};</script><script>$('#btn').click(function() {$.ajax({url: '',type: 'POST',data: {'front_to_end': xxx},success: function(an_input) {console.log(an_input);let obj = JSON.parse(an_input);$('#ip1').val(obj.x_axis);/*          ##############################################          */option = {xAxis: {type: 'category',data: obj.x_axis},yAxis: {type: 'value'},series: [{data: obj.y_axis,type: 'bar'}]};myChart.setOption(option);/*        ##########################################################     */}})})</script></body></html>

Django annotate报错遇到的问题相关推荐

  1. Django 页面报错 Maximum recursion depth exceeded

    Django 页面报错 Maximum recursion depth exceeded 原因: 视图中某个方法或函数的名称与django模块里的方法重名,而且在内部又调用了同名的方法导致重复调用自己 ...

  2. 运行Django项目报错解决,OSError: [WinError 123] 文件名、目录名或卷标语法不正确。

    文章目录 运行Django项目报错解决,OSError: [WinError 123] 文件名.目录名或卷标语法不正确. 报错 解决方式 -安装这个 module -找到使用这个 module 的地方 ...

  3. python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx'

    python的Web框架Django运行报错:Invalid HTTP_HOST header: 'xxx.xx.xxx.xxx:8000'. You may need to add 'xxx.xx' ...

  4. Django运行报错Invalid HTTP_HOST header: ‘0.0.0.0:8000‘. You may need to add ‘0.0.0.0‘ to ALLOWED_HOSTS.

    用python manage.py runserver 0.0.0.0:8000命令运行django后,然后通过浏览器访问服务器网址运行的8000端口,出现访问错误报错. 报错为: 报错原因: 刚接触 ...

  5. python3 Django框架报错(备忘录)

    这篇博客主要总结的学习Django框架中,遇到的报错如何去解决问题: 1.decimal.InvalidOperation: decimal.InvalidOperation: [<class ...

  6. 启动django服务器报错raise errorclass(errno, errval) django.db.utils.InternalError

    问题描述: 启动django服务器python manage.py runserver报错: raise errorclass(errno, errval) django.db.utils.Inter ...

  7. 运行django代码报错ModuleNotFoundError: No module named 'myapp'如何解决

    运行代码报错ModuleNotFoundError: No module named 'myapp'如何解决 您可以回顾一下之前是否使用过django核心模块中的User? from django.c ...

  8. django之 报错(1146, “Table ‘demo2.web‘ doesn‘t exist“)

    在启动django框架运行之后,我进行测试用户的登录功能模块, 我输入正确的用户名和密码以及验证码之后,本来正常情况时之间跳转到主页面的, 但是发现跳转到主页面不成功,报的信息是"登录账号不 ...

  9. 同步已有数据库到Django框架报错

    搭建Django框架的时候遇到这样的一个报错 报错信息 C:\workspace\anconda\lib\site-packages\django\db\models\base.py:299: Run ...

最新文章

  1. 阐述一下Mysql事务的四个特性_数据库事务的四个基本性质?
  2. ASCII、GB2312、GBK、Unicode、UTF-8介绍和转换
  3. js判断对象为空_在 JavaScript 中如何检查对象为空
  4. 设置oracle每行显示字符个数,Oracle一列的多行数据拼成一行显示字符-Oracle
  5. python class用法理解_带你全面理解python中self的用法
  6. mysql 主从复制 博客园_mysql主从复制
  7. Android在程序中浏览网页
  8. 正负电子碰撞湮灭,电荷哪里去了
  9. C语言常见例题源代码
  10. 微信公众号教程(13)公司通讯录开发 上
  11. mysql如何查看使用的配置_mysql 配置文件如何查询?
  12. java前后端分离解决session,解决前后端分离开发sessionId不一致问题
  13. pdf文件转为md文件
  14. 智慧物业大数据可视化平台
  15. 谈谈我的人才网站的的发展历程
  16. python切割、拼接图片
  17. dell7920工作站安装Linux,戴尔工作站(Precision 7920)安装双系统win10+ubuntu18.04
  18. 一种基于区块链的身份认证方法
  19. android 如何给图片添加水印
  20. 三十四、进阶之获取详情页面信息并显示

热门文章

  1. 混合框架ReactNative之 环境搭建
  2. 电大计算机网考怎么过,史上最牛--电大计算机网考小抄(考试必备)--2016.09.08【呕心沥血整理、电大考试必过】.doc...
  3. 基于Astar算法的栅格地图目标最短路径搜索算法MATLAB仿真,带GUI界面
  4. 教育平台线上课程数据分析
  5. 数据建模语言IDEF、IDEF1、IDEF1X
  6. 玩转格式转换——.xml->.txt
  7. 贝佐斯聘请SpaceX公司前高管 负责亚马逊卫星互联网项目
  8. 子弹发生html代码,查找并替换子弹列表到html样式
  9. 7.6_rmsprop
  10. log4j实现日志记录