如何使用chartjs在图表中显示带日期时间字段的django模型?

tgabmvqs  于 2022-11-06  发布在  Chart.js
关注(0)|答案(1)|浏览(207)

我有一个叫做ScanBatch的Django模型,Scan Batch由时间戳(datetime字段),域(char字段)和找到的ID总数(integer字段)等字段组成。
我的图表代码是:

  1. const ctx = document.getElementById('myChart').getContext('2d');
  2. const myChart = new Chart(ctx, {
  3. type: 'bar',
  4. data: {
  5. labels: [],
  6. datasets: []
  7. },
  8. options: {
  9. scales: {
  10. yAxes: [{
  11. id: 'A',
  12. type: 'linear',
  13. position: 'left',
  14. }, {
  15. id: 'B',
  16. type: 'linear',
  17. position: 'right',
  18. ticks: {
  19. max: 1,
  20. min: 0
  21. }
  22. }]
  23. }
  24. }
  25. });

型号代码为

  1. class ScanBatch(models.Model):
  2. domain = models.CharField(max_length=255)
  3. timestamp = models.DateTimeField(auto_now_add=True)
  4. valid_ids_found = models.IntegerField(default=0)

如何让图表显示django的历史批次数据,然后将其输出到图表?
我希望按日期显示历史批次,并按域分组。
要绘制的数据的示例如下:
www.someexample.com|2022年9月3日|三十四
www.someexample.com|2022年9月4日|五十五人

oyxsuwqo

oyxsuwqo1#

首先,你需要得到时间戳作为日期,连同域。然后,你将需要总结所有的ID的权利?(为每一天)
要执行此操作,您可以从以下位置获取:

已添加域

编辑开始
  1. chartdata = ScanBatch.objects.all().values('timestamp__date','domain').annotate(models.Sum('valid_ids_found'))

然后将其传递到模板上。
在模板中,为了准备数据,你需要在javascript中迭代它。

  1. const chartData = {{ chart_data |safe }};
  2. let arr = [];
  3. let arrlabels = [];
  4. let domainlabels = [];
  5. for (let value of Object.values(chartData)) {
  6. arr.push(value.valid_ids_found__sum);
  7. arrlabels.push(value.timestamp__date);
  8. domainlabels.push(value.domain)
  9. }
  10. console.log(chartData)
编辑结束

现在,您已经准备好图表数据,可以在图表中使用。

  1. const chartData = {{ chart_data |safe }};
  2. let arr = []
  3. let arrlabels = []
  4. for (let value of Object.values(chartData)) {
  5. arr.push(value.valid_ids_found__sum);
  6. arrlabels.push(value.timestamp__date);
  7. }
  8. const ctx = document.getElementById('myChart').getContext('2d');
  9. const myChart = new Chart(ctx, {
  10. type: 'bar',
  11. data: {
  12. labels: arrlabels ,
  13. datasets: arr
  14. },
  15. options: {
  16. scales: {
  17. yAxes: [{
  18. id: 'A',
  19. type: 'linear',
  20. position: 'left',
  21. }, {
  22. id: 'B',
  23. type: 'linear',
  24. position: 'right',
  25. ticks: {
  26. max: 1,
  27. min: 0
  28. }
  29. }]
  30. }
  31. }
  32. });

这至少是第一部分,我没有足够的知识Chart.js区分域也。对不起伙计。可能会帮助你沿着!

展开查看全部

相关问题