2014-09-21 2 views
0

저는 장고와 파이썬에서 아주 새로운데, 이것은 매우 기본적인 질문이 될 것입니다.django보기의 달 단위로 필터링

내 장고 구동 응용 프로그램에서 전체 텍스트 검색 메커니즘을 추가하려고하는데 문제가 있습니다.

검색 메커니즘의 설명 : 은 내가 UserCommission 모델을 가지고, 수수료 데이터가 내 UserCommission 모델 분명히 사용자의 다른 유형에 저장됩니다 부탁해 DateTimeField입니다 created_time 필드를 가지고 매월 사용자위원회를 검색하려고합니다.

내보기 파일 (전용 폼)

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

에 대한 내 생각이다하지만 난에 직면하고있다 다음 오류,

이 라인 (154)내보기 파일의 **

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

을 표시합니다.

나는 거의 초보자이기 때문에 무엇이 잘못되고 있는지 알 수 없습니다. 올바른 방법이 있나요? 전체 텍스트 Seacrh django에서? 만약 그렇다면, 내가 뭘 잘못 했는가?

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' 
,536하는 오류입니다

월을 검색 한 후 (5 월) 검색하십시오.

+0

보기에서'else' 뒤에 whats'' "'? 당신은'SyntaxError' 오류가 있습니다! – Kasramvd

+0

이 오류의 원인입니까? @ 카스라 – RTan

+0

아니, 그냥 물어봐! 나는'UserCommission.objects.filter' 내부에'.' 때문에 에러가 있다고 생각합니다. 당신의 관점에서'154' 라인이 뭐라고할까요? – Kasramvd

답변

1

당신은 그래서 당신이 더 많은 정보를 원하시면 UserCommission.objects.filter(created_time__month=year)

로 변경해야이 부분 때문에 인수 이름에 UserCommission.objects.filter(created_time.month=year) 원인 SyntaxError를 점 사용 장고 사이트에 exac를 읽을 수 없습니다!데이터베이스 테이블의 "정렬"설정이 정확한 비교는 대소 문자를 구분 여부를 결정, 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

+0

은 밑줄이어야합니다! – Kasramvd

+0

답변에 따라 코드를 편집 한 다음 달 ** 9 월 ** 선택을 검색하려고했지만이 오류가 발생했습니다 ** ValueError/showphoto/user_commission_results/ base가있는 int()에 대한 리터럴이 잘못되었습니다. 10 : '9 월'** – RTan

1

문제는 저장 장고에 의해 검색 년대 달 달 하지 달 점이다 이름은입니다. 여기에는 여러 가지 이유가 있지만 기본 언어 중 하나는 여러 언어에 대한 사이트를 개발할 수 있으므로 번호를 저장하고 사용자가 어떤 언어를 사용하는지에 따라 1 월, 1 월, 1 월 또는 1 월을 표시하는 것이 훨씬 쉽습니다. 말한다.

이 문제를 해결하는 가장 쉬운 방법은 값이 개월 수 있도록 템플릿을 변경하는 것입니다 :

<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 것을 고려할 수도 있지만 실제로 달에 보내고, 그에 따라 이름을 바꿉니다.

관련 문제