Django-filter: ๋ฉ”์„œ๋“œ๊ฐ€ ์žˆ๋Š” django_filters.BooleanFilter์™€ ๋ชจ๋ธ์—์„œ ์ƒ์†๋œ ๋ถ€์šธ ํ•„ํ„ฐ๋Š” ๊ฐ™์€ ๋ฐฉ์‹์œผ๋กœ ์ž‘๋™ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์— ๋งŒ๋“  2017๋…„ 04์›” 24์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: carltongibson/django-filter

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

๋ชจ๋“  3 ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š” @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๋ฅผ ์ œ์™ธํ•œ ๋ชจ๋“  ๊ฒฝ์šฐ์— ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰