django-filter에서 같은 생일 사람을 검색하고 싶습니다!
소개
이 기사는 장고 Advent Calendar 2020 9일째 기사입니다.
2년 연속 2회째의 참가입니다.
django-filter를 사용하여 같은 생일의 사람 (월일이 동일)을 얻고 싶었습니다.
샘플을 만들었습니다.
django-filter에서 같은 생일 사람을 검색하는 샘플
생년월일을 DateField로 가지고 있으므로, 그대로 django-filter를 사용하면 이런 느낌↓
생년월일 전부 같은 사람이 아니라, 생일의 연월이 같은 사람을 취득하고 싶습니다만, 이것이라면 「날짜를 올바르게 입력해 주세요」가 됩니다.
YYYY-MM-DD 형식으로 입력하지 않았기 때문입니다.
DateField 의 월일만을 검색하려면 (api)/views.py
에 필터 세트를 작성합니다.
(api)/views.pyfrom django_filters import rest_framework as filters
from rest_framework import viewsets
from sample.models import Samplepeople
from sampleapi.serializers import SamplepeopleSerializers
# フィルタセット
class SampleFilter(filters.FilterSet):
# Date型の月、日をそれぞれ検索できるようにする
birthday_month = filters.NumberFilter(field_name='date_of_birth', lookup_expr='month')
birthday_day = filters.NumberFilter(field_name='date_of_birth', lookup_expr='day')
class Meta:
model = Samplepeople
fields = ['id', 'name', 'kana', 'date_of_birth',]
# 通常のViewSet
class SampleViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Samplepeople.objects.all()
serializer_class = SamplepeopleSerializers
filter_backends = [filters.DjangoFilterBackend]
# 上記のFilterを追加する
filter_class = SampleFilter
필터 세트로 설정한 항목이 추가됩니다.
즉시 같은 생일 사람을 검색합니다.
태어난 해는 다르지만 같은 달과 같은 사람이 검색되었습니다.
그리고는 API 두드릴 때에 ?birthday_month=&birthday_day=
에 달과 일을 넣어 주면 OK입니다.
이것이라면 같은 탄생월의 사람을 검색하는 것도 손쉽네요. lookup_expr='year'
를 추가하여 같은 해에 태어난 사람을 검색 할 수도 있습니다.
DateTimeFilter가 아님
DateField 검색이므로 DateTimeFilter를 사용합니까? 라고 생각했는데, 처음의 녀석과 같이 「날짜를 올바르게 입력해 주세요」가 됩니다.
DateTimeFilter도 YYYY-MM-DD(YYYY-MM-DD HH24-mm-SS) 형식으로 입력해야 하기 때문입니다(1패)
결론
더 좋은 방법이 있다면 알려주세요.
참고
샘플을 만들었습니다.
django-filter에서 같은 생일 사람을 검색하는 샘플
생년월일을 DateField로 가지고 있으므로, 그대로 django-filter를 사용하면 이런 느낌↓
생년월일 전부 같은 사람이 아니라, 생일의 연월이 같은 사람을 취득하고 싶습니다만, 이것이라면 「날짜를 올바르게 입력해 주세요」가 됩니다.
YYYY-MM-DD 형식으로 입력하지 않았기 때문입니다.
DateField 의 월일만을 검색하려면
(api)/views.py
에 필터 세트를 작성합니다.(api)/views.py
from django_filters import rest_framework as filters
from rest_framework import viewsets
from sample.models import Samplepeople
from sampleapi.serializers import SamplepeopleSerializers
# フィルタセット
class SampleFilter(filters.FilterSet):
# Date型の月、日をそれぞれ検索できるようにする
birthday_month = filters.NumberFilter(field_name='date_of_birth', lookup_expr='month')
birthday_day = filters.NumberFilter(field_name='date_of_birth', lookup_expr='day')
class Meta:
model = Samplepeople
fields = ['id', 'name', 'kana', 'date_of_birth',]
# 通常のViewSet
class SampleViewSet(viewsets.ReadOnlyModelViewSet):
queryset = Samplepeople.objects.all()
serializer_class = SamplepeopleSerializers
filter_backends = [filters.DjangoFilterBackend]
# 上記のFilterを追加する
filter_class = SampleFilter
필터 세트로 설정한 항목이 추가됩니다.
즉시 같은 생일 사람을 검색합니다.
태어난 해는 다르지만 같은 달과 같은 사람이 검색되었습니다.
그리고는 API 두드릴 때에
?birthday_month=&birthday_day=
에 달과 일을 넣어 주면 OK입니다.이것이라면 같은 탄생월의 사람을 검색하는 것도 손쉽네요.
lookup_expr='year'
를 추가하여 같은 해에 태어난 사람을 검색 할 수도 있습니다.DateTimeFilter가 아님
DateField 검색이므로 DateTimeFilter를 사용합니까? 라고 생각했는데, 처음의 녀석과 같이 「날짜를 올바르게 입력해 주세요」가 됩니다.
DateTimeFilter도 YYYY-MM-DD(YYYY-MM-DD HH24-mm-SS) 형식으로 입력해야 하기 때문입니다(1패)
결론
더 좋은 방법이 있다면 알려주세요.
참고
의사 개인정보 데이터 생성 서비스
Reference
이 문제에 관하여(django-filter에서 같은 생일 사람을 검색하고 싶습니다!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shimayu22/items/4657559ada55f4145997텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)