2014-02-13 2 views
0

django_filter의 DateFilter를 사용하여 정확한 날짜로 필터링하려하지만 결과를 반환하지 못했습니다./models.pydjango_filters.DateFilter를 사용하는 방법?

from django.db import models 

class Event(models.Model): 
    start = models.DateField() 
    title = models.CharField(_'title'), max_length=256) 

MyApp를

MyApp를/filters.py 예를 들어

from myapp.models import Event 
import django_filters 

class EventFilter(django_filters.FilterSet): 
    start = django_filters.DateFilter(
     'start', label=_('With start date'), 
     widget=forms.DateInput() # I'm using a datepicker-like widget to enter date 
    ) 

    class Meta: 
     model = Event 
     fields = ('start',) 

: 나는 시작 날짜 2012년 1월 14일와 이벤트가 있습니다. 날짜 필터에 해당 값을 입력하면 아무 것도 반환하지 않습니다.

django_filter의 설명서 사이트에서 DateFilter에 대한 자세한 설명을 filter reference 또는 Using django-filter guide으로 찾을 수 없습니다. 또는 일반적으로 어디서나. 내가 뭘 잘못했을지 모르겠다.

datepicker 위젯의 날짜 형식이 데이터를 입력하기 위해 다른 형식으로 사용되고 있으므로 제대로 작동하지 않는다고 생각하지 않습니다.

추가 정보 : 나는 장고-1.6을 사용하고 있는데 어떤 장고 필터

+2

는'관련하거나 오타 SO에 코드를 붙여하지만되지 않을 수 있습니다 필드 = (' start ')'문자열은'fields = ('start ',)'여야합니다. –

+0

고마워요. 그건 제 입력 어입니다. 그것은 코드에서'fields = ('start',)'입니다. – mathiass

+0

'... = django_filters.DateFilter ('start', ...'?)의''start''가 필요합니까? – mathiass

답변

1

의 마지막 버전은 문제를 발견.

'start' 필드는 DateTimeField입니다. 따라서 날짜 만 쿼리 할 때는 시간 인과 일치하지 않으므로 일치하는 항목이 없습니다. 예를 들어

: 나는이 2012년 1월 14일를 입력하면

, 그것은 시작 날짜 datetime.date(2012, 01, 14, 0, 0) 찾지 만 실제 시작 날짜는 datetime.datetime(2012, 01, 14, 21, 0, tzinfo=<UTC>)을 할 수있다.

솔루션 :

사용 lookup_type='startswith' 또는 'lookup_type='contains' (source)하지만 수 'contains' 나타납니다 빠른

Class EventFilter(django_filters.FilterSet): 
    start = django_filters.DateFilter(
     'start', label=_('With start date'), 
     lookup_type='contains' # use contains 
    ) 

    ...