Django 1.10 - 无法将关键字“__”解析为字段。加入'__'不允许

时间:2016-11-14 08:34:12

标签: python django

我正在尝试使用chartjs创建一个图表,以显示民意调票的所有统计数据。这是特定的一年,有12个月。

例如,

你是程序员吗?

  1. 没有

  2. 我想在图表中显示 - 用户在一年中的12个月内投了多少票。我将在图表中绘制2行代表YesNo的答案统计信息,其级别为Jauary - December

    我已经完成了所有模型并且它们完美运行。

    但是在poll详细信息页面中,我尝试获得12个月的投票记录统计信息,得到错误。以下是获取记录计数的视图代码 -

    vote_records = Vote.objects.filter(question = question_record, pub_date__year = current_year).values_list('pub_date__month').count()
    

    此处pub_dateVote模型发布日期 -

    pub_date = models.DateTimeField(auto_now_add=True)
    

    错误是 -

      

    无法将关键字'月'解析为字段。加入'pub_date'不是   允许的。

    感谢您的帮助!

2 个答案:

答案 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]