【问题标题】:Django query database and send data to templateDjango 查询数据库并将数据发送到模板
【发布时间】:2017-06-23 02:05:05
【问题描述】:

我还是 Django/Web 开发的新手,但对 Python 和 PSQL 有经验。

我有一个 psql 数据库,其中有一个表,其中包含股票投资组合的id、日期和值。该表的标题是绝对美元值。

我想将数据发送到模板,然后使用 Highcharts.JS 绘制它。据我了解,我需要设置models.py来查询安装在Django中的数据库,将其转换为JSON,然后将其发送到模板进行绘图。

谁能告诉我这是否是获取 id、日期和值的正确语法,以及如何将 json 格式的日期和值发送到模板?

这是适用的模型部分:

class Absolutedollarvalue(models.Model):
    cik = models.CharField(max_length=16)
    date = models.DateField()
    value = models.DecimalField(max_digits=65535, decimal_places=65535)

    class Meta:
        managed = False
        db_table = 'absolutedollarvalue'

下面是我的views.py代码:

from django.shortcuts import render
from django.http import HttpResponse
from django.db import connection
from toa.models import Absolutedollarvalue as adv
import psycopg2
import json
import datetime

def adv(request):
    adv.objects
    a = adv(id = '1103804')

    return render(request,toa/graphs.html,a)

这是我的模板:

<html>
<head>
  <title> Fund Performance </title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script>
<script src="http://code.highcharts.com/highcharts.js"></script>

</head>
<body>
  <div id="chart_container" style="width:100%; height:400px;"></div>
  <script type="text/javascript">
    $(document).ready(function() {
      var absolutedollarval = {
        chart: {
          renderTo: 'chart_panel',
          type: 'time-series',
        },
        legend: {enabled: false},
        title: {text: 'Daily NAV'},
        xAxis: {title:{text:'Date'}},
        yAxis: {title: {text: 'dollar value'}}
      };
      var chartDataUrl = "{% url 'chart_data_json' %}?name = avg_by_day"
        +"&days=14";
      $.getJSON(chartDataUrl,
      function(data){
        absolutedollarval.xAxis.categories=
        absolutedollarval.series[0].name = 
        absolutedollarval.series[0].data = 
        var chart = new Highcharts.Chart(absolutedollarval);
      });
    });
  </script>
</body>
</html>

非常感谢您提供的任何帮助。谢谢!

编辑:

如果我想要日期和值列,你会这样将值推送到模板吗?

def adv(request): 
    dates = adv.objects.filter(cik = '1103804').values('date') 
    vals = adv.objects.filter(cik ='1103804').value('absolutedollarvalue') 
    data = serializers.serialize('json', dates) 
    data2 = serializers.serialize('json',vals) 
    return render(request,'toa/graphs.html',{"dates":data,"values":data2})

【问题讨论】:

  • 你的adv 函数看起来像废话。您应该阅读 django 文档以了解如何编写视图函数并传递要在模板中呈现的变量。
  • 我在检索对象时使用了 django 文档,他们给出了示例: >>> Blog.objects >>> b = Blog (name='Foo', tagline='Bar') >>> b.objects
  • 所以我认为对象 a 应该给我所有具有该 ID 的数据行。我只想将日期和值转换为json,然后发送到highcharts
  • Django 文档确实不给出了如何查询的示例。请阅读教程。
  • 做adv.objects.filter(cik = '1103804').values('Column1','Column2') ,你会得到字典列表。

标签: django postgresql django-models highcharts django-views


【解决方案1】:

将 JSON 格式的值发送到模板:

from django.core import serializers

def adv(request):
    adv.objects
    a = adv(id = '1103804') #Will fetch all the column
    a = adv(id = '1103804').values('columnName') #Will fetch the particular column.
    data = serializers.serialize('json', a)
    context = Context(data)
    return render(request,'toa/graphs.html',context)
    render(request, "foo.html", {'jsonKey': jsonValue}) #For passing individual JSON

【讨论】:

  • 有没有办法单独发送数据?喜欢日期列,以及对应的值列?
  • 这样就很容易在 highcharts 中为 x 轴和 y 轴分别数据?
  • @user3628240,你可以这样传render(request, "foo.html", {'jsonKey': jsonValue})
  • 好的,谢谢!你能告诉我如何获得 adv 的各个列吗?所以对象 a 基本上应该是具有 id、日期和值的元组组。我想传递日期和相应的值。我需要再做一次查询吗?
  • 另外,adv.objects.filter(id="1103804") 和你上面写的方式有区别吗?感谢您的帮助
猜你喜欢
  • 1970-01-01
  • 2013-01-21
  • 2013-05-26
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 2018-03-18
  • 2020-04-25
  • 2020-01-22
相关资源
最近更新 更多