Django-filter: TypeError: __init__()์— ์˜ˆ๊ธฐ์น˜ ์•Š์€ ํ‚ค์›Œ๋“œ ์ธ์ˆ˜ '์ด๋ฆ„'์ด ์žˆ์Šต๋‹ˆ๋‹ค.

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

๋‚˜๋Š” ๋ฌธ์„œ์˜ ์˜ˆ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

release_year__gt = django_filters.NumberFilter(name='release_date', lookup_expr='year__gt')

ํ•˜์ง€๋งŒ ์˜ค๋ฅ˜๊ฐ€ ๋ฐœ์ƒํ–ˆ์Šต๋‹ˆ๋‹ค.
TypeError: __init__() got an unexpected keyword argument 'name'

์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•  ๋•Œ 'name'์ด 'field_name'์œผ๋กœ ๋ณ€๊ฒฝ๋œ ๊ฒƒ์„ ๋ฐœ๊ฒฌํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฌธ์„œ๊ฐ€ ์˜ค๋ž˜๋œ ๊ฒƒ ๋งž์ฃ ?

๋˜ํ•œ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = FileEvent
        fields = ['file_name', ]

์œ„๋Š” ๊ดœ์ฐฎ์ง€ ๋งŒ ์ฝ”๋“œ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ :

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = FileEvent
        fields = {'file_name' : ['icontains'] }

๊ทธ๊ฒƒ์€ ์ผ์ด ์•„๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ SQL์—๋Š” like %somevalue% ๋ฌธ์ด ์—†์Šต๋‹ˆ๋‹ค. ์ด์œ ๋Š” ๋ฌด์—‡์ž…๋‹ˆ๊นŒ?

๊ฐ์‚ฌ ํ•ด์š”,
ํฌ๋ฆฌ์Šค

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

@zhangqunshi๋‹˜ , ์•ˆ๋…•ํ•˜์„ธ์š”. name ๊ฐ€ field_name . ๋ฌธ์„œ๋Š” ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ์‹œํ—˜ํŒ์ธ ์ด์œ ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค).

์‹ค์ œ ๋ชจ๋ธ์„ ๋ณด์ง€ ์•Š๊ณ  FileEvent ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

FileEvent.objects.filter(file_name__icontains='foo')

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

@zhangqunshi๋‹˜ , ์•ˆ๋…•ํ•˜์„ธ์š”. name ๊ฐ€ field_name . ๋ฌธ์„œ๋Š” ์ด๋ฅผ ๋ฐ˜์˜ํ•˜๋„๋ก ์—…๋ฐ์ดํŠธ๋˜์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค(์ด๊ฒƒ์ด ์‹œํ—˜ํŒ์ธ ์ด์œ ์˜ ์ผ๋ถ€์ž…๋‹ˆ๋‹ค).

์‹ค์ œ ๋ชจ๋ธ์„ ๋ณด์ง€ ์•Š๊ณ  FileEvent ๋ฅผ ๋””๋ฒ„๊ทธํ•˜๋Š” ๊ฒƒ์€ ์‰ฝ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•˜๋ฉด ์–ด๋–ป๊ฒŒ ๋ฉ๋‹ˆ๊นŒ?

FileEvent.objects.filter(file_name__icontains='foo')

FileEvent๋Š” ๊ฐ„๋‹จํ•˜๋ฉฐ report_id, file_name ๋ฐ event_time๋งŒ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•  ๋•Œ:

FileEvent.objects.filter(file_name__icontains='foo')

๊ทธ๊ฒƒ์€ SQL์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

select * from file_event where file_name like '%foo%'

์ฝ”๋“œ:

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = FileEvent
        fields = ['file_name', ]

๊ทธ๊ฒƒ์€ SQL์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

select * from file_event where file_name ='foo'

์ฝ”๋“œ:

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = FileEvent
        fields = {'file_name' : ['icontains'] }

๊ทธ๊ฒƒ์€ SQL์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค :

select * from file_event

BTW ์ฟผ๋ฆฌ ์„ธํŠธ๋ฅผ ๊ฐ€์ ธ์˜ค๋Š” ์ฝ”๋“œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

    filter = MyFilter(request.GET,
                               queryset=FileEvent.objects.values().filter(report_id=1).order_by(
                                   '-event_time'))
   print(filter.qs)

๊ทธ๋ฆฌ๊ณ  ๋ฌธ์„œ์—์„œ ๊ณตํ†ต ๋ณด๊ธฐ์˜ ํ•„ํ„ฐ ๊ฒฐ๊ณผ๋ฅผ ์–ป๋Š” ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ๋„์›€์„ ์ฐพ์„ ์ˆ˜ ์—†์œผ๋ฏ€๋กœ ์ฝ”๋“œ๋ฅผ ์กฐํšŒํ•˜๊ณ  BaseFilterSet์—์„œ 'qs'ํ•„๋“œ๋ฅผ ์ฐพ์œผ๋ฉด ์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค.

์ด์ œ ์ฝ”๋“œ๋ฅผ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

class MyFilter(django_filters.FilterSet):
    file_name = django_filters.CharFilter(lookup_expr='icontains')

    class Meta:
        model = FileEvent
        fields = ['file_name',]

์ž‘๋™ํ•ฉ๋‹ˆ๋‹ค. SQL์€ like '%foo%'

@zhangqunshi , ๋‚ด ์ƒ๊ฐ์—๋Š” ์ž˜๋ชป๋œ ์ฟผ๋ฆฌ ๋ฌธ์ž์—ด๋กœ ํ•„ํ„ฐ๋งํ•˜๊ณ  ์žˆ๋Š” ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ํ•ด์•ผํ•œ๋‹ค:

/file-events?file_name__icontains=foo

๋‹น์‹  ๋ง์ด ๋งž์•„, ๋‚˜๋Š” URL์„ ์‚ฌ์šฉํ•œ๋‹ค: /file-events?file_name=foo
์ฝ”๋“œ๊ฐ€ ์ด๋ฏธ file_name ํ•„๋“œ๋ฅผ ์ •์˜ํ•˜๊ณ  icontain์„ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๋„ค. ์ฒ˜์Œ์—๋Š” ์ง๊ด€์ ์ด์ง€ ์•Š์ง€๋งŒ ์‚ฌ์ „ ๊ตฌ๋ฌธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ํ•„ํ„ฐ๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€๊ฒฝ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด,

class MyFilter(django_filters.FilterSet):
    class Meta:
        model = FileEvent
        fields = {'file_name': ['icontains', 'istartswith', 'iendswith',]}

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด /file-events?file_name__istarswith=foo&file_name__iendswith=log ์™€ ๊ฐ™์€ ์ฟผ๋ฆฌ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•Œ๊ฒ ์Šต๋‹ˆ๋‹ค. ['icontains', 'istartswith', 'iendswith',] ์ฝ”๋“œ๋Š” ์ง€์›๋˜๋Š” ์ฟผ๋ฆฌ ์œ ํ˜• ๋ชฉ๋ก์ผ ๋ฟ์ž…๋‹ˆ๋‹ค. ์ฟผ๋ฆฌ๊ฐ€ ๋ชฉ๋ก์˜ ํ•ญ๋ชฉ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์œผ๋ฉด django-filter๋Š” ์ด๋ฅผ ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.

์ •๋ง ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค :-)

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