我正在尝试使用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'))
和ETC ...
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文件(?)”之类的错误
我真的希望有人能解决我的问题。
谢谢您的帮助。
答案 0 :(得分: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":"..."}]