2011-06-15 5 views
1

Django 응용 프로그램을 작성하고 있습니다. 그리고 관리자는 월, 연도 등의 이름도 포함 할 수있는 검색어를 기반으로 항목을 검색 할 수 있어야합니다.Search DateFields 장고 관리자의 형식 A로 포맷 B에 저장되었지만

문제 (이 문제에 대한 해결책을 찾을 수없는 것 같습니다. 장고 (날짜, 데이터 저장소에 저장되는 방식)에 대한 기본 형식은 % Y- % m- % d이지만, "데이터 저장소"와 같은 말의 쿼리에서 검색 할 수 있기를 바랍니다. 6 월 "장고 관리 검색에서.

날짜가 유지되는 형식을 변환하지 않고 사용자 지정 날짜 형식을 사용하여 날짜 필드를 검색 할 수있게하려면 어떻게해야합니까?

답변

0

날짜 및 시간은 특수 문자 유형으로 데이터베이스에 저장됩니다. 문자열 검색뿐만 아니라보다 큼,보다 작거나 같은 특수 날짜 시간 작업을 수행 할 수 있어야하기 때문입니다.

Django ORM은 문자열, 정수 및 datetime 개체를 비롯한 표준 형식 중 하나로 포맷 된 문자열로 날짜 - 시간을 허용합니다.

예 :

Entry.objects.filter(pub_date__year=2006) 

또는

Entry.objects.filter(
...  headline__startswith='What' 
...).exclude(
...  pub_date__gte=datetime.now() 
...).filter(
...  pub_date__gte=datetime(2005, 1, 1) 
...) 

당신은 datetime 객체에 문자열의 시간을 구문 분석하는 여러 라이브러리 중 하나를 사용할 수 있습니다. 가장 쉬운 멋진 dateutil 라이브러리를 사용하는 것입니다 :

import dateutil.parser 
dateutil.parser.parse('2008-08-09T18:39:22Z') 
#Following is returned 
datetime.datetime(2008, 8, 9, 18, 39, 22, tzinfo=tzutc()) 
+0

감사 락스하지만 문제는 날짜 개체를 구문 분석하지 않습니다 검색 창에''May '라는 검색어를 입력하여 db 테이블에서 날짜가'2010-5-4 '인 항목. 문제는이 종류의 날짜 쿼리로 결과를 선택하도록 검색 엔진에 알리는 방법에 있습니다. – nemesisfixx

0

당신은 아마 이미 답을 찾았을하지만, 누군가에게 도움이 될 수 있습니다 여전히에보고 (자신처럼!). 장고 1.6

: 당신은 검색 결과를 사용자 정의 할 수 있습니다 https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_search_results

이전 장고 버전는 : 당신은 쿼리 문자열에 일시적인 변화에 날짜 형식을 자신의 변경 목록을 사용해야합니다. 형식이 일시적으로 만 변경되므로 사용자가 쿼리 문자열에 변경 사항을 볼 수 없습니다.

아래 예는 영국 날짜 형식을 허용합니다. '31 1999년 12월 '하지만 쉽게 날짜 형식을 허용하도록 변경 (또는 같은 한 달 이름 수'@nemesisfixx의 요청 당반 ')하여 관리 모델에서

변경 목록 클래스 정의 :

class MyModelAdmin(admin.ModelAdmin): 
    ... 
    def get_changelist(self, request, **kwargs): 
     """ 
     Returns the ChangeList class for use on the changelist page. 
     """ 
     return MyChangeList 
을 그런 다음 MyChangeList 클래스

: - 내가 이미 수 있지만, 검색 할 수 있도록 내장 장고 관리자 검색 사용자 수 있도록

class MyChangeList(ChangeList): 
def get_query_set(self, request): 
    # Allow date search with UK format 
    try: 
     date_search = datetime.datetime.strptime(self.query, '%d %b %Y').date().strftime('%Y-%m-%d') 
    except ValueError: 
     date_search = self.query 
    with temporary_value(self, 'query', date_search): 
     qs = super(MyChangeList, self).get_query_set(request) 
     return qs