Как я могу передать свои данные sqlite в django и создать диаграмму?

#django #sqlite #highcharts #chart.js #django-queryset

#django #sqlite #высокие диаграммы #chart.js #django-набор запросов

Вопрос:

Я пытаюсь создать линейную диаграмму, используя данные в базе данных sqlite.

Но я понятия не имею, как передать мои данные в views.py и файл шаблона html.

Я хочу создать линейную диаграмму (ось x: дата, ось y: количество по дате)

Я пытался сделать это, используя необработанный набор запросов и другие вещи…

 requestCnt = ActivityLog.objects.raw("SELECT date(doDate), count(requestType) FROM mainApp_activitylog GROUP BY doDate")
  

или

 requestCnt = ActivityLog.objects.values('doDate').annotate(Count('requestType'))
  

И Т.Д…

Models.py

 class ActivityLog(models.Model):
    doDate = model.DateTimeField()
    userIP = models.CharField(max_length=200)
    userName =models.CharField(max_length=200)
    requestType = models.CharField(max_length=200)
  

Ниже приведен мой необработанный запрос sqlite.

 sqlite> SELECT date(doDate), count(requestType) FROM mainApp_activitylog GROUP BY doDate;
  

и результат такой, как показано ниже

 2019-04-15|3
2019-04-16|16
2019-04-17|13
2019-04-18|10
2019-04-19|13
2019-04-22|24
  

Как я могу передать эти результаты выше в X-Axle и Y-axle?

Я хочу создать линейную диаграмму (ось X: дата, ось Y: количество запросов по дате)

У меня есть небольшая идея, что я должен использовать дампы Json или что-то в этом роде.

Я уже сталкивался с такой ошибкой, как «невозможно сериализовать как файл Json (?)»

Я действительно надеюсь, что кто-нибудь сможет решить мою проблему.

Заранее спасибо за вашу помощь.

Комментарии:

1. можете ли вы поделиться своим мнением и шаблоном?

2. Мне действительно жаль, но я не могу поделиться этими вещами из-за политики безопасности моей компании…

Ответ №1:

Вы можете отправить набор запросов в шаблон в контексте и использовать там значения.

 class YourTemplate(TemplateView):
    def get_context_data(self, **kwargs):
        requestCnt = ActivityLog.objects.annotate(request_count=Count('requestType')).values('doDate', 'request_count')
        context = super().get_context_data(**kwargs)
        context["data"] = requestCnt
        return context
  

Затем в вашем шаблоне вы можете использовать data переменную, чтобы получить данные для обеих осей. Данные будут иметь следующий формат:

 [{"doDate":"...", "request_count":"..."}, {"doDate":"...", "request_count":"..."}]
  

Комментарии:

1. Действительно благодаря вашему ответу. Но у меня есть еще один вопрос. Можете ли вы, пожалуйста, подсказать мне какое-либо решение для создания диаграммы с использованием переменной «data»? (высокие диаграммы или charts.js и т.д. … )

2. @JaehanPark вы можете использовать Django Rest Framework для создания API. А затем вызвать его с помощью js.

3. @JaehanPark вы можете использовать любой фреймворк, который вам нравится .. charts.js это довольно просто.