#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
это довольно просто.