Как я могу передать свои данные sqlite в django и сделать диаграмму? - PullRequest
0 голосов
/ 23 апреля 2019

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

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

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

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

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

OR

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 и Y?

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

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

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

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

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

1 Ответ

1 голос
/ 23 апреля 2019

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

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":"..."}]
...