You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django模型数据无法传递至Highcharts图表问题求助

排查Django数据传递到Highcharts无数据的问题

首先看你给出的代码片段里有个明显的笔误:data = Char...应该是ChartData.check_usage_data()吧?这大概率是导致数据没获取到的第一步原因,先修正这个拼写错误。

接下来咱们一步步排查其他可能的问题:

1. 修正视图里的数据获取逻辑

你的ChartData类里的方法调用需要调整,而且最好给方法加上静态装饰器,避免实例化的麻烦,修改后的视图示例如下:

def master(request):
    class ChartData(object):
        @staticmethod
        def check_usage_data():
            data = {'usage': []}
            sources = RealTimeData.objects.all()
            # 可以用列表推导式简化代码,同时确保数据是数字类型
            data['usage'] = [float(source.usage) for source in sources if source.usage is not None]
            return data
    
    if request.user.is_authenticated():
        # 正确调用方法获取数据
        chart_data = ChartData.check_usage_data()
        # 将数据传入模板上下文
        return render(request, '你的模板文件名.html', {'chart_data': chart_data})
    else:
        # 处理未认证用户的逻辑,比如重定向登录页
        return redirect('login')

这里额外做了两个优化:用列表推导式简化循环,同时判断usage不为空并转成浮点型——Highcharts只认数字类型的数据,如果你的usage是字符串类型,必须转成数字才能被图表识别。

2. 确保模板正确解析数据

在模板的Highcharts配置中,一定要用|safe过滤器让Django把数组正确传递给JS,否则数据会被转义成字符串,图表无法识别:

<script src="https://code.highcharts.com/highcharts.js"></script>
<div id="usage-chart"></div>
<script>
    Highcharts.chart('usage-chart', {
        title: {
            text: '实时使用数据'
        },
        series: [{
            name: '使用量',
            data: {{ chart_data.usage|safe }}
        }]
    });
</script>

你可以先在模板里加一行调试代码,确认数据是否真的传递过来:

<p>调试数据:{{ chart_data.usage }}</p>

如果这里能看到类似[12, 34, 56]的数组,说明视图到模板的数据传递没问题,问题出在图表配置;如果看不到,那就是视图获取数据的逻辑有问题。

3. 用AJAX异步获取数据的场景(如果是这种情况)

如果你是通过AJAX异步加载数据,需要单独写一个返回JSON的接口视图:

from django.http import JsonResponse

def get_usage_data(request):
    if not request.user.is_authenticated():
        return JsonResponse({'error': '未授权'}, status=401)
    # 直接从数据库取数据并整理成数组
    usage_data = [float(item.usage) for item in RealTimeData.objects.all() if item.usage]
    return JsonResponse({'usage': usage_data})

然后在urls.py里配置这个接口的路由:

path('api/usage-data/', views.get_usage_data, name='get_usage_data'),

最后在模板里用AJAX请求数据并渲染图表:

<script>
    fetch('/api/usage-data/')
        .then(res => res.json())
        .then(data => {
            Highcharts.chart('usage-chart', {
                series: [{
                    name: '使用量',
                    data: data.usage
                }]
            });
        })
        .catch(err => console.log('获取数据失败:', err))
</script>

4. 额外调试技巧

  • 在视图里打印数据,确认数据库查询结果:
    chart_data = ChartData.check_usage_data()
    print(chart_data)  # 查看控制台输出是否有预期数据
    
  • 检查浏览器控制台的Network和Console标签,看是否有AJAX请求错误、JS语法错误,或者数据格式不符合预期。

内容的提问来源于stack exchange,提问作者paolompmojica

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 04:13:15