Django 사용자 지정 필터:DateFieldListFilter 다시 쓰기
4586 단어 Django
class MyDateTimeFilter(admin.filters.DateFieldListFilter):
def __init__(self, *args, **kwargs):
super(MyDateTimeFilter, self).__init__(*args, **kwargs)
now = timezone.now()
# When time zone support is enabled, convert "now" to the user's time
# zone so Django's definition of "Today" matches what the user expects.
if timezone.is_aware(now):
now = timezone.localtime(now)
filter_end_date = now.replace(hour=0, minute=0, second=0, microsecond=0)
filter_start_date_for_one_week = filter_end_date - datetime.timedelta(days=7)
month_with_day31 = [1,3,5,7,8,10,12]
if filter_end_date.month in month_with_day31 and filter_end_date.day == 31 and filter_end_date.month != 3:
if filter_end_date.month == 1:
filter_start_date_for_one_month = filter_end_date.replace(year=filter_end_date.year-1, month=12)
else:
filter_start_date_for_one_month = filter_end_date.replace(month=filter_end_date.month-1, day=30)
elif filter_end_date.month == 3 and filter_end_date.day in [29, 30, 31]:
if is_leap_year(filter_end_date.year):
filter_start_date_for_one_month = filter_end_date.replace(month=filter_end_date.month-1, day=29)
else:
filter_start_date_for_one_month = filter_end_date.replace(month=filter_end_date.month-1, day=28)
else:
if filter_end_date.month == 1:
filter_start_date_for_one_month = filter_end_date.replace(year=filter_end_date.year-1, month=12)
else:
filter_start_date_for_one_month = filter_end_date.replace(month=filter_end_date.month-1)
filter_start_date_for_six_month = ''
filter_start_date_for_six_month_month = (filter_end_date.month - 6 + 12) % 12
if filter_start_date_for_six_month_month == 0:
filter_start_date_for_six_month_month = 12
if filter_start_date_for_six_month_month in month_with_day31:
if filter_end_date.month > 6:
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month)
else:
filter_start_date_for_six_month = filter_end_date.replace(year=filter_end_date.year-1, month=filter_start_date_for_six_month_month)
elif filter_start_date_for_six_month_month == 2:
if filter_end_date.day in [29, 30, 31]:
if is_leap_year(filter_end_date.year):
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month, day=29)
else:
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month, day=28)
else:
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month)
else:
if filter_end_date.day == 31 and filter_end_date.month >6:
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month, day=30)
elif filter_end_date.day == 31 and filter_end_date.month <=6:
filter_start_date_for_six_month = filter_end_date.replace(year=filter_end_date.year-1, month=filter_start_date_for_six_month_month, day=30)
elif filter_end_date.day <31 and filter_end_date.month >6:
filter_start_date_for_six_month = filter_end_date.replace(month=filter_start_date_for_six_month_month)
else:
filter_start_date_for_six_month = filter_end_date.replace(year=filter_end_date.year-1, month=filter_start_date_for_six_month_month)
filter_end_date = filter_end_date + datetime.timedelta(days=1)
self.links = ((
('------', {}),
('Past week', {
self.lookup_kwarg_since: str(filter_start_date_for_one_week),
self.lookup_kwarg_until: str(filter_end_date),
}),
('Past month', {
self.lookup_kwarg_since: str(filter_start_date_for_one_month),
self.lookup_kwarg_until: str(filter_end_date),
}),
('Past 6 months', {
self.lookup_kwarg_since: str(filter_start_date_for_six_month),
self.lookup_kwarg_until: str(filter_end_date),
}),
('All', {}),
))
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Django 라우팅 계층 URLconf 작용 및 원리 해석URL 구성(URLconf)은 Django가 지원하는 웹 사이트의 디렉토리와 같습니다.그것의 본질은 URL과 이 URL을 호출할 보기 함수 사이의 맵표입니다. 위의 예제에서는 URL의 값을 캡처하고 위치 매개 변수로...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.