2016-11-14 35 views
1

我正在使用chartjs製作圖表以顯示投票投票的所有統計信息。這是12個月的特定年份。Django 1.10 - 無法將關鍵字'__'解析到字段中。加入'__'不允許

例如,

你是程序員嗎?

  1. 沒有

我想在圖表顯示 - 用戶多少票給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

不管是什麼原因 - 如果你只打算爲了計算它們,爲什麼需要values_list? – RemcoGerlich

+0

我對'Django'很新穎。我試圖讓'list'不是'字典' – user3384985

+1

但count()將返回一個單一的數字,而不是一個列表。 – RemcoGerlich

回答

2

您可以通過以下方式生成查詢:

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),),]

使用平面後=真它是

[(日期時間。日期時間(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} 
+0

超級回答!一個編輯需要 - '如果i.month在d和i.month在dMonthsCount: dMonthsCount [i.month] = dMonthsCount [i.month] + 1 ' – user3384985

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] 
相關問題