Django-filter: IsoDateTimeFilter '์ •ํ™•ํ•œ' ์ด์™ธ์˜ ๋ฌธ์ œ ๋น„๊ต

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

์—ฌ๊ธฐ์— ์„ค๋ช…๋œ ํ•„ํ„ฐ๋ง์„ ๊ตฌํ˜„ํ•˜๋ ค๊ณ  ํ–ˆ์Šต๋‹ˆ๋‹ค. http://django-filter.readthedocs.io/en/develop/ref/filters.html#isodatetimefilter

๊ทธ ๋ฐฉ๋ฒ•์ด ์ž‘๋™ํ•˜๋Š” ๋™์•ˆ '์ •ํ™•ํ•œ' ์ผ์น˜ ์ด์ƒ์„ ์›ํ–ˆ๊ธฐ ๋•Œ๋ฌธ์— ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ฐ”๊ฟจ์Šต๋‹ˆ๋‹ค.
fields = ['published']
์™€ ํ•จ๊ป˜:
fields = {'published': ['exact', 'gte', 'lte']}
์ด๊ฒƒ์€ ์—ฌ์ „ํžˆ โ€‹โ€‹IsoDateTime์„ ์‚ฌ์šฉํ•œ '์ •ํ™•ํ•œ' ํ•„ํ„ฐ๋ง์— ๋Œ€ํ•ด ์ž‘๋™ํ•˜์ง€๋งŒ 'gte' ๋ฐ 'lte'์˜ ๊ฒฝ์šฐ IsoDateTime์„ ์‚ฌ์šฉํ•  ๋•Œ ์‹คํŒจํ•ฉ๋‹ˆ๋‹ค. DateTime์„ ์‚ฌ์šฉํ•  ๋•Œ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

ํ˜„์žฌ ๊ฐ ์กฐํšŒ๋ฅผ ๋ณ„๋„๋กœ ์ง€์ •ํ•˜์—ฌ IsoDateTime๊ณผ ํ•จ๊ป˜ ์ž‘๋™ํ•˜๋Š” ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

published = django_filters.IsoDateTimeFilter(
    name='published', lookup_expr='exact')
published_gte = django_filters.IsoDateTimeFilter(
    name='published', lookup_expr='gte')
published_lte = django_filters.IsoDateTimeFilter(
    name='published', lookup_expr='lte')

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Meta.filter_overrides ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ํ•„๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ํ•„ํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class BookFilter(django_filters.FilterSet):

    class Meta:
        model = Book
        fields = {'published': ['exact', 'lte', 'gte']}
        filter_overrides = {
            models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
        }

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

ํ . ๋‚ด ์ฒซ ๋ฒˆ์งธ ์‘๋‹ต์€ ์ด๊ฒƒ์„ ์‚ฌ์ „ fields ๊ตฌ๋ฌธ์˜ ์ œํ•œ์œผ๋กœ ๋ฐ›์•„๋“ค์ด๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•„๋“œ๋ฅผ ๋ช…์‹œ์ ์œผ๋กœ ์„ ์–ธํ•˜๋Š” ๊ฒƒ("ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•")์€ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ํ‘œ์ค€ ๋ฐฉ๋ฒ•์ž…๋‹ˆ๋‹ค. ์‚ฌ์ „ ๊ตฌ๋ฌธ์€ ๋ฐ”๋กœ ๊ฐ€๊ธฐ์— ๋ถˆ๊ณผํ•˜๋ฉฐ ์ œํ•œ์ด ์žˆ๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์—†์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ธด ํ•˜์ง€๋งŒ, ๋‚˜๋Š” ์ด๊ฒƒ์„ "์ˆ˜์ •"ํ•˜๊ธฐ ์œ„ํ•ด ์ž‘์€ ๋ฐœ์ž๊ตญ์œผ๋กœ ๋ณ€๊ฒฝ์„ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค...

Meta.filter_overrides ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋ชจ๋ธ ํ•„๋“œ์— ์‚ฌ์šฉ๋˜๋Š” ํ•„ํ„ฐ ํด๋ž˜์Šค๋ฅผ ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

class BookFilter(django_filters.FilterSet):

    class Meta:
        model = Book
        fields = {'published': ['exact', 'lte', 'gte']}
        filter_overrides = {
            models.DateTimeField: {'filter_class': django_filters.IsoDateTimeFilter},
        }

@carltongibson ์ œํ•œ์„ ์ˆ˜๋ฝํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค. ๋น ๋ฅธ "์ˆ˜์ •"์„ ์ฐพ์œผ๋ ค๊ณ  ํ–ˆ์ง€๋งŒ ํ˜„์žฌ ์ฝ”๋“œ์˜ ๋‚ด๋ถ€ ์ž‘๋™์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋„ˆ๋ฌด ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค./

@rpkilby ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค, ๊ท€ํ•˜์˜ ์ œ์•ˆ์€ ์ž˜ ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. ์•ž์œผ๋กœ ์‚ฌ์šฉํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. :)

@carltongibson ๋ฌธ์„œ์—์„œ ์ด ์ œํ•œ ์‚ฌํ•ญ์„ ์–ธ๊ธ‰ํ•˜์‹œ๊ฒ ์Šต๋‹ˆ๊นŒ? ์ ์ ˆํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•˜์‹œ๋ฉด ํ’€ ๋ฆฌํ€˜์ŠคํŠธ๋ฅผ ํ•˜๊ฒŒ ๋˜์–ด ๊ธฐ์ฉ๋‹ˆ๋‹ค.

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