我正在尝试使用chartjs创建一个图表,以显示民意调票的所有统计数据。这是特定的一年,有12个月。
例如,
你是程序员吗?
是
没有
我想在图表中显示 - 用户在一年中的12个月内投了多少票。我将在图表中绘制2行代表Yes
和No
的答案统计信息,其级别为Jauary - December
。
我已经完成了所有模型并且它们完美运行。
但是在poll
详细信息页面中,我尝试获得12个月的投票记录统计信息,得到错误。以下是获取记录计数的视图代码 -
vote_records = Vote.objects.filter(question = question_record, pub_date__year = current_year).values_list('pub_date__month').count()
此处pub_date
是Vote
模型发布日期 -
pub_date = models.DateTimeField(auto_now_add=True)
错误是 -
无法将关键字'月'解析为字段。加入'pub_date'不是 允许的。
感谢您的帮助!
答案 0 :(得分:3)
您可以按如下方式生成查询:
vote_records = Vote.objects.filter(question = question_record, pub_date__year = current_year).values_list('pub_date', flat=True)
我们正在使用平键,因为
它给出了给定的列表元组:
[(datetime.datetime(2016,11,11,15,5,3,875344),),]
使用flat = True之后
[(datetime.datetime(2016,11,11,15,5,3,875344)]
我们可以按月计算月份:
dMonthsCount = {}
for i in vote_records:
if i.month in d:
dMonthsCount[i.month] = dMonthsCount[i.month] + 1
else:
dMonthsCount[i.month] = 1
#Here key is month number and value is count
#dMonthsCount = {10: 5, 11: 8, 4: 3}
#We can also convert as follow:
Months_dict = {1:'January', 2:'February', 3:'March', 4:'April', 5:'May', 6:'June', 7:'July',
8:'August', 9:'September', 10:'October', 11:'November', 12:'December'}
MonthsCount={}
for i in dMonthsCount:
MonthsCount[Months_dict[i]] = dMonthsCount[i]
#MonthsCount = {'April': 3, 'November': 8, 'October': 5}
答案 1 :(得分:0)
正如评论中所指出的,如果您只需要计算某些内容,则不必使用values_list
。
你得到这个错误的原因是因为当你在values_list
中使用双下划线时,django将其视为外键,尝试进行连接并失败。为了将年份作为列表,您应该按如下方式编写代码:
vote_records = Vote.objects.filter(question = question_record,
pub_date__year = current_year).values_list('pub_date')
vote_records = [x.year for x in vote_records]