如何将条形图添加到基于Django的数据库中?

阿图尔

尊敬的社区成员,

我真的希望您能帮助我将条形图添加到Django项目中。1.我有一个大约有1000个项目的数据库。2.我需要能够在需要时可视化每个商品3个月的销售情况。不确定什么是正确的方法。

这是我的models.py:

从django.db导入模型从数学导入*从十进制导入*

class Itemslist(models.Model):
    item_n = models.CharField(max_length=200)
    sales_this_month = models.DecimalField(blank=True, null=True, max_digits=19, 
    decimal_places=0)
    saleslm = models.DecimalField(blank=True, null=True, max_digits=19, decimal_places=0)
    sales2m = models.DecimalField(blank=True, null=True, max_digits=19, decimal_places=0)
    sales3m = models.DecimalField(blank=True, null=True, max_digits=19, decimal_places=0)


    def __str__(self):
        return self.item_n

这是我的views.py文件,它是我使用提供的最新解决方案创建的实验:

def charts(request):
    charts = Itemslist.objects \
        .values('saleslm') \
        .annotate(lm=Count('saleslm')) \
        .annotate(m2=Count('sales2m')) \
        .annotate(3m3=Count('sales3m')) \
        .order_by('saleslm')
    return render(request, 'charts.html', {'charts': charts})

如您所见,这不是我需要的解决方案,我只是想至少想出一些东西,而eaven向我展示了具有相同值的图形。这是我的hmtl代码:

{% extends 'base.html' %}
{% block js %}
{% if user.is_authenticated %}
{% load loads_extra %}
{% load static %}

<br>
<p>Logged in user: {{ user.username }}</p>
<br>


<html>
<head>
<meta charset="utf-8">
<title>Django Highcharts Example</title>
</head>
<body>
<div id="container"></div>
{
<script src="https://code.highcharts.com/highcharts.src.js"></script>
<script>
  Highcharts.chart('container', {
      chart: {
          type: 'column'
      },
      title: {
          text: 'Sales previous 3 months'
      },
      xAxis: {
          categories: ['sales']
      },
      series: [{
          name: '3mBack',
          data: [ {% for entry in charts %}{{ entry.m3 }}{% endfor %} ]
      }, {
          name: '2mBack',
          data: [ {% for entry in charts %}{{ entry.m2 }}{% endfor %} ]
      }, {
          name: 'Lmonth',
          data: [ {% for entry in charts %}{{ entry.lm }}{% endfor %} ]
      }, ]

  });
</script>

</body>
</html>

{% endif %}
{% endblock %}

<!-- charting tutorial to follow :  https://simpleisbetterthancomplex.com/tutorial/2018/04/03/how-to-integrate-highcharts-js-with-django.html -->

我必须为图表创建一个请求按钮,然后必须使用正确的参数来生成图表。

看过这个问题:在Django中显示多个条形图

也已搜索过此解决方案https://code.djangoproject.com/wiki/Charts

并看着这篇文章https://simpleisbetterthancomplex.com/tutorial/2018/04/03/how-to-integrate-highcharts-js-with-django.html

上一篇文章是最清晰的,您可以看到,我刚刚从那里复制粘贴了解决方案,并做了一些小的更改。这是我放置在base.html文件中的脚本:

<script src="https://code.highcharts.com/highcharts.src.js"></script>

这就是我最终显示的图表:

高图

但是在我的情况下仍然找不到如何处理它。

All this solutions, as far as I can see, are showing how to implement charting to one array, or to sum or self generated array. But I want to be able to chose, when to show a graph and for which Item.

the button is placed on this html file:

{% extends 'base.html' %}
{% block js %}
{% if user.is_authenticated %}
{% load loads_extra %}
{% load static %}

<br>
<p>Logged in user: {{ user.username }}</p>
<br>


    <body>
            <table id="example" class="table table-striped table-bordered dt-responsive nowrap" style="width:100%">
            <thead>
            <tr>
              <th>SUP:</th>
              <th>Item N.:</th>
              <th>SKU</th>
              <th>Description</th>
              <th>3mBack</th>
              <th>2mBack</th>
              <th>Lmonth</th>
              <th>CMonth</th>
              <th>Nmonth</th>
              <th>N2Month</th>
              <th>N3month</th>
              <th></th>

            </tr>
            </thead>
            <tbody>
                        {% for records in sorted %}
                <tr>
                <td>{{ records.sup }}</td>
                <td>{{ records.item_n }}</td>
                <td>{{ records.sku }}</td>
                <td>{{ records.description }}</td>
                <td>{{ records.sales3m }}</td>
                <td>{{ records.sales2m }}</td>
                <td>{{ records.saleslm }}</td>
                <td>{{ records.sales_this_month }}</td>
                <td>{{ records.m1predicted }}</td>
                <td>{{ records.m2predicted }}</td>
                <td>{{ records.m3predicted }}</td>

                <td>
                  <a href="{% url 'edit' records.id %}" class="btn btn-secondary">Edit</a>
                </td>

                            </tr>
                        {% endfor %}

            </tbody>
        </table>

        <script>
        $(document).ready(function() {
            var table = $('#example').DataTable( {
            fixedColumns: true,
                lengthChange: true,
                buttons: [ 'copy', 'excel', 'csv', 'pdf', 'colvis' ]
            } );

            table.buttons().container()
                .appendTo( '#example_wrapper .col-md-6:eq(0)' );
        } );
         </script>
    </body>
</html>
{% endif %}
<div></div>
{% endblock js %}

This is my first question in this community, so if something is not clear, please help me to correct it in a right way.

waiting for any helpful answers!!!

Artur

Good News community.

I have been offered a very good solution, and now my question is completely sorted.

At least for my needs, this is a perfect solution.

instead of highcharts, I have been offered to use d3js.org, which is absolutely fine for me.

The logic behind a code is that you request data from the values displayed, hopefully it will be clear, when you will go through the code with comments.

因为它是django项目,所以这是我的html文件的标题:

{% extends 'base.html' %}
{% block js %}
{% if user.is_authenticated %}
{% load loads_extra %}
{% load static %}

<br>
<p>Logged in user: {{ user.username }}</p>
<br>

这是显示表/值的我的html代码的一部分:

<table id="example" class="table table-striped table-bordered dt-responsive nowrap" style="width:100%">
            <thead>
            <tr>
              <th>SUP:</th>
              <th>Item N.:</th>
              <th>SKU</th>
              <th>Description</th>
              <th>6mBack</th>
              <th>5mBack</th>
              <th>4mBack</th>
              <th>3mBack</th>
              <th>2mBack</th>
              <th>Lmonth</th>
              <th>CMonth</th>
              <th>Nmonth</th>
              <th>N2Month</th>
              <th>N3month</th>
              <th>AVGrowth</th>
              <th></th>
              <!-- This is header for new button to draw the Bar Charts -->
              <th></th>

            </tr>
            </thead>
            <tbody>
              {% for records in sorted %}
                <tr>
                <td>{{ records.sup }}</td>
                <td>{{ records.item_n }}</td>
                <td>{{ records.sku }}</td>
                <td>{{ records.description }}</td>
                <td>{{ records.sales6m }}</td>
                <td>{{ records.sales5m }}</td>
                <td>{{ records.sales4m }}</td>
                <td>{{ records.sales3m }}</td>
                <td>{{ records.sales2m }}</td>
                <td>{{ records.saleslm }}</td>
                <td>{{ records.sales_this_month }}</td>
                <td>{{ records.m1predicted }}</td>
                <td>{{ records.m2predicted }}</td>
                <td>{{ records.m3predicted }}</td>
                <td>{{ records.avgrowths }}</td>

                <td>
                  <a href="{% url 'edit' records.id %}" class="btn btn-secondary">Edit</a>
                </td>
                <!-- Add new button for drawing Bar Charts -->
                <td>
                  <button class="btn btn-secondary" onclick="draw_chart(this)" data-toggle="modal" data-target="#myModal">Chart</button>
                </td>

            </tr>
          {% endfor %}

         </tbody>
        </table>

请阅读评论以了解什么是什么。

这是html的其余部分,它通过按下必须可视化的数组前面的按钮在topup窗口上生成图表:

<!-- Modal which Bar Chart will be placed -->
        <div id="myModal" class="modal fade" role="dialog">
            <div class="modal-dialog" style="max-width: 900px !important">
            <!-- Modal content-->
                <div class="modal-content">
                    <div class="modal-header">
                        <button type="button" class="close" data-dismiss="modal">&times;</button>
                    </div>
                    <div class="modal-body">
                        <!-- <svg> element which will contains the Bar Chart -->
                        <svg width="1000" height="500"></svg>
                    </div>
                    <div class="modal-footer">
                        <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                    </div>
                </div>
            </div>
        </div>
        <!-- Insert D3.js Library -->
        <script src="https://d3js.org/d3.v5.min.js"></script>
        <script>
        $(document).ready(function() {
            var table = $('#example').DataTable( {
            fixedColumns: true,
                lengthChange: true,
                buttons: [ 'copy', 'excel', 'csv', 'pdf', 'colvis' ]
            } );

            table.buttons().container()
                .appendTo( '#example_wrapper .col-md-6:eq(0)' );
        } );
        // Main functions for Drawing Bar chart using D3.js
        function draw_chart(item){
            // `item` is the current clicked button element
            // `row_ele` is the parent <tr> element of the current clicked button element
            row_ele = item.closest('tr');
            // Get the value from the <td> element using nth-child()
            val_6mBack = row_ele.querySelector("td:nth-child(5)");
            val_5mBack = row_ele.querySelector("td:nth-child(6)");
            val_4mBack = row_ele.querySelector("td:nth-child(7)");
            val_3mBack = row_ele.querySelector("td:nth-child(8)");
            val_2mBack = row_ele.querySelector("td:nth-child(9)");
            val_Lmonth = row_ele.querySelector("td:nth-child(10)");
            val_CMonth = row_ele.querySelector("td:nth-child(11)");
            val_Nmonth = row_ele.querySelector("td:nth-child(12)");
            val_N2Month = row_ele.querySelector("td:nth-child(13)");
            val_N3month = row_ele.querySelector("td:nth-child(14)");

            // `data` is variable which store the data for Bar Charts
            data = []
            // Pushing data as key/value type objects into the `data` variable
            data.push({'label':'6mBack', 'value': val_6mBack.innerHTML})
            data.push({'label':'5mBack', 'value': val_5mBack.innerHTML})
            data.push({'label':'4mBack', 'value': val_4mBack.innerHTML})
            data.push({'label':'3mBack', 'value': val_3mBack.innerHTML})
            data.push({'label':'2mBack', 'value': val_2mBack.innerHTML})
            data.push({'label':'Lmonth', 'value': val_Lmonth.innerHTML})
            data.push({'label':'CMonth', 'value': val_CMonth.innerHTML})
            data.push({'label':'Nmonth', 'value': val_Nmonth.innerHTML})
            data.push({'label':'N2Month', 'value': val_N2Month.innerHTML})
            data.push({'label':'N3month', 'value': val_N3month.innerHTML})


            // Set <svg> element's width and height
            var svg = d3.select("svg"),
                        margin = 200,
                        width = svg.attr("width") - margin,
                        height = svg.attr("height") - margin
            // Remove the old contents of the <svg> element
            svg.selectAll('*').remove()
            // Initialize X-axis and Y-axis for Bar Chart
            var xScale = d3.scaleBand().range([0, width]).padding(0.4),
                yScale = d3.scaleLinear().range([height, 0]);

            // Set all group which is placed in the <svg>element
            // transform to (50,100) on <svg> area , margint in svg has been changed to 300 and instead 50/100, changed to 100/300, but then back.
            var g = svg.append("g")
                        .attr("transform", "translate(" + 50 + "," + 100 + ")");


            xScale.domain(data.map(function(d) { return d.label; }));
            // If all values of data will be zero, we will fix the range of the Y-axis
            if(d3.max(data, function(d) { return d.value; }) == 0){
                yScale.domain([0, 10]);
            }else{
                // If all is not zero, we will set Y-axis from 0 to maximum value.
                yScale.domain([0, d3.max(data, function(d) { return Number(d.value); })]);
            }

            // Set X- axis
            g.append("g")
             .attr("transform", "translate(0," + height + ")")
             .call(d3.axisBottom(xScale));
             // Set Y-axis using ticket
            g.append("g")
             .call(d3.axisLeft(yScale).tickFormat(function(d){
                 return d;
             }).ticks(10));

             console.log(data)
            // Draw Bar Chart using <rect> element by data which is stored in the `data` variable
            g.selectAll(".bar")
             .data(data)
             .enter().append("rect")
             .attr("class", "bar")
             .attr("x", function(d) { return xScale(d.label); })
             .attr("y", function(d) { return yScale(d.value); })
             .attr("width", xScale.bandwidth())
             .attr("height", function(d) { return height - yScale(d.value); })
             .style('fill','#899da6');
        }
        </script>
    </body>
{% endif %}
{% endblock js %}

所以最后这就是我的html看起来如何:

在此处输入图片说明

这是一个图表,通过按图表按钮可以得到:

在此处输入图片说明

为了帮助社区,请提出问题,如果有更好的方法,请添加/更正。

非常感谢您的帮助和关注!!!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何将总计添加到amcharts中的堆叠条形图

来自分类Dev

如何将新数据从ebay添加到Django中的数据库?

来自分类Dev

如何将新数据从ebay添加到Django中的数据库?

来自分类Dev

如何将已计算的标准误差值添加到条形图(ggplot)中的每个条形?

来自分类Dev

如何将NullableBooleanField添加到现有的Django数据库中?

来自分类Dev

NVD3.js-如何将条形图文本添加到堆积图中的每个条形图?

来自分类Dev

如何将垂直对齐的条形图添加到具有水平内容的li中?

来自分类Dev

如何将click事件添加到angular js指令中以绘制浮点条形图

来自分类Dev

如何将click事件添加到angular js指令中以绘制浮点条形图

来自分类Dev

如何将图像添加到轴上的条形图(matplotlib)

来自分类Dev

如何将列表中的数据动态添加到数据库(PostgreSQL)

来自分类Dev

如何将数据添加到Firestore数据库中的现有文档

来自分类Dev

如何将新的数据行添加到我的 Derby 数据库中?

来自分类Dev

如何将数据添加到 firebase 数据库中已有的引用?

来自分类Dev

如何将新数据添加到 android 中的 Firebase 数据库?

来自分类Dev

Dimple.js-将数据标签添加到条形图的每个条形

来自分类Dev

如何将复选框中的值添加到数据库

来自分类Dev

如何将多个python变量添加到SQL数据库中?

来自分类Dev

如何将一些值添加到我的数据库中

来自分类Dev

ggplot:如何将组平均值作为一条线添加到R中的分组条形图?

来自分类Dev

将误差线添加到条形图

来自分类Dev

r将线条或线段添加到条形图

来自分类Dev

将eventlistner添加到SVG条形图

来自分类Dev

将 % 添加到条形图 ggplot2

来自分类Dev

将演化线添加到堆叠条形图

来自分类Dev

如何将新对象添加到现有实体,将数据放入数据中并让EF将其添加到我的数据库中?

来自分类Dev

将数据点添加到Excel堆叠条形图

来自分类Dev

如何将数据库中的数据添加到C#中的变量以进行登录

来自分类Dev

如何使用HightCharts将两个dataLabel添加到条形图

Related 相关文章

  1. 1

    如何将总计添加到amcharts中的堆叠条形图

  2. 2

    如何将新数据从ebay添加到Django中的数据库?

  3. 3

    如何将新数据从ebay添加到Django中的数据库?

  4. 4

    如何将已计算的标准误差值添加到条形图(ggplot)中的每个条形?

  5. 5

    如何将NullableBooleanField添加到现有的Django数据库中?

  6. 6

    NVD3.js-如何将条形图文本添加到堆积图中的每个条形图?

  7. 7

    如何将垂直对齐的条形图添加到具有水平内容的li中?

  8. 8

    如何将click事件添加到angular js指令中以绘制浮点条形图

  9. 9

    如何将click事件添加到angular js指令中以绘制浮点条形图

  10. 10

    如何将图像添加到轴上的条形图(matplotlib)

  11. 11

    如何将列表中的数据动态添加到数据库(PostgreSQL)

  12. 12

    如何将数据添加到Firestore数据库中的现有文档

  13. 13

    如何将新的数据行添加到我的 Derby 数据库中?

  14. 14

    如何将数据添加到 firebase 数据库中已有的引用?

  15. 15

    如何将新数据添加到 android 中的 Firebase 数据库?

  16. 16

    Dimple.js-将数据标签添加到条形图的每个条形

  17. 17

    如何将复选框中的值添加到数据库

  18. 18

    如何将多个python变量添加到SQL数据库中?

  19. 19

    如何将一些值添加到我的数据库中

  20. 20

    ggplot:如何将组平均值作为一条线添加到R中的分组条形图?

  21. 21

    将误差线添加到条形图

  22. 22

    r将线条或线段添加到条形图

  23. 23

    将eventlistner添加到SVG条形图

  24. 24

    将 % 添加到条形图 ggplot2

  25. 25

    将演化线添加到堆叠条形图

  26. 26

    如何将新对象添加到现有实体,将数据放入数据中并让EF将其添加到我的数据库中?

  27. 27

    将数据点添加到Excel堆叠条形图

  28. 28

    如何将数据库中的数据添加到C#中的变量以进行登录

  29. 29

    如何使用HightCharts将两个dataLabel添加到条形图

热门标签

归档