2014-09-21 69 views
0

我在Django和Python中很新,這將是一個非常基本的問題。在Django視圖中按月過濾

我面臨的問題,而我試圖在我的Django應用程序中添加一個全文搜索機制。

說明的搜索機制 我有一個UserCommission模型,其中手續費數據被存儲針對不同類型的用戶,顯然我UserCommission模型有CREATED_TIME場,這是一個DateTimeField字段。現在我正在嘗試針對每個月搜索用戶佣金。

這是我的觀點文件(僅表格)

<form role="form" method='post' action='/showphoto/user_commission_results/'> 
     <tr> 
       {% csrf_token %} 

       <td><select name="year"> 
        <option value="January">January</option> 
        <option value="February">February</option> 
        <option value="March">March</option> 
        <option value="April">April</option> 
        <option value="May">May</option> 
        <option value="June">June</option> 
        <option value="July">July</option> 
        <option value="August">August</option> 
        <option value="September">September</option> 
        <option value="October">October</option> 
        <option value="November">November</option> 
        <option value="December">December</option> 
       </select> 
      </td> 
      <td> 
       <input type='submit' value='search' /> 
      </td> 
     </tr> 
    </form> 

這是我的模型

class UserCommission(models.Model): 
    user = models.ForeignKey(User) 
    created_time = models.DateTimeField('Created Time',auto_now_add=True) 
    commission = models.IntegerField() 

,這是我對搜索

def user_commission_results(request): 
    year = request.POST.get('year') 
    commission_results = UserCommission.objects.filter(created_time.month=year) 

    return render_to_response('photo/user_commission_results.html',{'commission_results':commission_results},context_instance=RequestContext(request)) 

的看法,但我面對出現以下錯誤,

SyntaxError at/
keyword can't be an expression (views.py, line 154) 

這條線154表示**

commission_results = UserCommission.objects.filter(created_time.month=year) 
我的視圖文件的

因爲我幾乎是一個新手,我無法弄清楚是怎麼回事。 在django中創建一個全文seacrh是否正確?如果是,那麼我在這裏做了什麼錯誤?

UPDATE: 的錯誤我在做,我是用點的過濾參數在我看來

commission_results = UserCommission.objects.filter(created_time.month=year) 

這實際上導致了錯誤,現在改成了這樣

(。)
commission_results = UserCommission.objects.filter(created_time__month=year) 

,但現在我是一個錯誤,是

ValueError at /showphoto/user_commission_results/ 
invalid literal for int() with base 10: 'May' 

選擇一個月後(5月)進行搜索。

+0

whats'「」'在你視圖中的else之後嗎?你有一個'SyntaxError'錯誤! – Kasramvd 2014-09-21 06:14:24

+0

是否導致錯誤? @卡斯拉 – RTan 2014-09-21 06:17:04

+0

不,我只是問!我認爲這個錯誤是因爲'UserCommission.objects.filter'中的''。你會在視圖中說出'154'這行嗎? – Kasramvd 2014-09-21 06:17:24

回答

1

在參數名稱不能使用點所以這部分UserCommission.objects.filter(created_time.month=year)原因SyntaxError 所以你必須將其更改爲UserCommission.objects.filter(created_time__month=year)

更多信息在Django網站閱讀exac

Django的網站說

在MySQL中,數據庫表中的「整理」設置確定確切的比較是否區分大小寫。這是一個數據庫設置,而不是Django設置。可以將MySQL表配置爲使用區分大小寫的比較,但涉及一些權衡。有關此信息,請參閱databases文檔中的collation section

,併爲最後的錯誤,你可以在你的模板改變您輸入的值:

   <option value="1">January</option> 
       <option value="2">February</option> 
       <option value="3">March</option> 
       <option value="4">April</option> 
       <option value="5">May</option> 
       <option value="6">June</option> 
       <option value="7">July</option> 
       <option value="8">August</option> 
       <option value="9">September</option> 
       <option value="10">October</option> 
       <option value="11">November</option> 
       <option value="12">December</option> 
+0

它會是一個雙下劃線或一個下劃線,即created_time__month或created_time_month? – RTan 2014-09-21 06:26:34

+0

必須是雙下劃線! – Kasramvd 2014-09-21 06:29:15

+0

我已根據您的答案編輯我的代碼,然後嘗試搜索選擇月份** 9月**,但現在我面臨此錯誤** ValueError at/showphoto/user_commission_results/ 無效字面值爲int()with base 10:'9月'** – RTan 2014-09-21 06:42:48

1

的問題是,一個儲存和Django在檢索到的一個月是一個月不是一個月名稱。這有很多原因,但其中一個基本原因是您可能正在開發多種語言的網站,因此,更容易存儲該號碼,然後顯示January,Janvier或Januar或enero,具體取決於用戶的語言說話。

解決這個問題的最簡單方法是更改​​模板,以便值是月數:

<select name="year"> 
    <option value="1">January</option> 
    <option value="2">February</option> 
    <option value="3">March</option> 
    <option value="4">April</option> 
    <option value="5">May</option> 
    <option value="6">June</option> 
    <option value="7">July</option> 
    <option value="8">August</option> 
    <option value="9">September</option> 
    <option value="10">October</option> 
    <option value="11">November</option> 
    <option value="12">December</option> 
</select> 

您可能還需要考慮的是,名字是year但你實際發送月份,並相應地重命名它。