django_filters.BooleanFilter์ ์ํด ์์ฑ๋ ๋ถ์ธ ํํฐ๊ฐ ๋ชจ๋ธ์์ ์์๋ ๋ถ์ธ ํํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ค๋ฅธ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๋ฅผ ์์ํ๋ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋ชจ๋ธ์์ ์์๋ ๋ถ์ธ ํํฐ๋ ๋งค๊ฐ๋ณ์๊ฐ true ๋๋ false์ผ ๊ฒ์ผ๋ก ์์ํ๊ณ , BooleanFilter์ ์ํด ์์ฑ๋ ํํฐ๋ ๋งค๊ฐ๋ณ์๊ฐ ๋ค์ ์ค ํ๋์ผ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
1 - "์ค์ ๋์ง ์์"์ผ๋ก ๋ฒ์ญ๋จ
2 - "์ฌ์ค"๋ก ๋ฒ์ญ๋จ
3 - "๊ฑฐ์ง"์ผ๋ก ๋ฒ์ญ๋จ
์ด ๋์์ ๋๋จธ์ง API ์ฌ์ฉ์ ์ ์ ํํฐ๋ฅผ ์๋ฐ์คํฌ๋ฆฝํธ ์ธก์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ถ๋ถ๋ช
ํ๊ฒ ๋ง๋ญ๋๋ค.
์์ ์ฝ๋:
model.py:
class TestModel(models.Model):
first = models.BooleanField()
last = models.BooleanField()
api.py
`django_filters ๊ฐ์ ธ์ค๊ธฐ
rest_framework์์ ๋ทฐ ์ธํธ ๊ฐ์ ธ์ค๊ธฐ, ์ง๋ ฌ ๋ณํ๊ธฐ
.models์์ TestModel ๊ฐ์ ธ์ค๊ธฐ
ํด๋์ค TestFilter(django_filters.rest_framework.FilterSet):
first_and_last = django_filters.BooleanFilter(๋ฉ์๋='first_and_last_filter')
def first_and_last_filter(self, queryset, ์ด๋ฆ, ๊ฐ):
๊ฐ==์ฐธ์ธ ๊ฒฝ์ฐ:
return queryset.filter(first=True, last=True);
๋ฐํ ์ฟผ๋ฆฌ ์ธํธ;
ํด๋์ค ๋ฉํ:
๋ชจ๋ธ = ํ
์คํธ ๋ชจ๋ธ
ํ๋ = ['์ฒซ ๋ฒ์งธ', '๋ง์ง๋ง', '์ฒซ ๋ฒ์งธ_๋ฐ_๋ง์ง๋ง']
ํด๋์ค TestSerializer(serializers.ModelSerializer):
ํด๋์ค ๋ฉํ:
๋ชจ๋ธ = ํ
์คํธ ๋ชจ๋ธ
ํ๋ = ['์ฒซ ๋ฒ์งธ', '๋ง์ง๋ง']
ํด๋์ค TestViewSet(viewsets.ModelViewSet):
๋ชจ๋ธ = ํ
์คํธ ๋ชจ๋ธ
์ฟผ๋ฆฌ ์ธํธ = TestModel.objects.all()
serializer_class = TestSerializer
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
filter_fields = ('์ฒซ ๋ฒ์งธ', '๋ง์ง๋ง', '์ฒซ ๋ฒ์งธ ๋ฐ_๋ง์ง๋ง', )
filter_class = ํ
์คํธ ํํฐ`
์ฌ๊ธฐ์์ ํ
์คํธ ๋ทฐ ์ธํธ ํํฐ๋ ์ฟผ๋ฆฌ ๋งค๊ฐ๋ณ์๊ฐ "์ฒซ ๋ฒ์งธ" ๋ฐ "๋ง์ง๋ง" ํ๋์ ๋ํด "true" ๋๋ "false"์ผ ๊ฒ์ผ๋ก ์์ํ์ง๋ง "first_and_last" ํํฐ ํ๋์ ๋ํด์๋ 1,2 ๋๋ 3์ผ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
์๋ฅผ ๋ค์ด ํํฐ๋ง ์ฟผ๋ฆฌ ์ฝ๋๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
/api/test/?first=true&first_and_last=2
์ด๊ฒ์ ์ฌ์ฉ์ ์ ์ ํํฐ์ ๋ ๋ณต์กํ ๋
ผ๋ฆฌ๊ฐ ํฌํจ๋์ด ์๋ ์ค์ ํ๋ก์ ํธ์ ๋จ์ํ๋ ์์
๋๋ค.
๋ฌธ์ ๋ฅผ ์ฌํํ๋ ๋ฐ ํ์ํ ๋ชจ๋ ์ฝ๋๋ก ๋ฆฌํฌ์งํ ๋ฆฌ๋ฅผ ์ค์ ํ์ต๋๋ค.
https://github.com/inakrin/boolfilter
์๋
ํ์ธ์ @inakrin์
๋๋ค. rest_framework
ํ์ ํจํค์ง์์ filters
๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.
https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py
๋ฐ๋ผ์ ํํฐ์์ ๊ฐ์ ธ์ค๊ธฐ๋ฅผ ์ ์ํ๊ธฐ ๋๋ฌธ์ DRF ๋ฌธ์์์ ์ธ๊ธํด์ผ ํฉ๋๋ค.
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filterset
๋ฌผ๋ก BooleanFilter๋ฅผ ์ ์ธํ ๋ชจ๋ ๊ฒฝ์ฐ์ ์๋ํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์ @inakrin์ ๋๋ค.
rest_framework
ํ์ ํจํค์ง์์filters
๋ฅผ ๊ฐ์ ธ์์ผ ํฉ๋๋ค.https://github.com/carltongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py