๋๋ ๋ฌธ์์ ์๋ฅผ ์ฌ์ฉํฉ๋๋ค.
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')
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๋ ์ด๋ฅผ ๋ฌด์ํฉ๋๋ค.
์ ๋ง ๊ฐ์ฌํฉ๋๋ค :-)
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
@zhangqunshi๋ , ์๋ ํ์ธ์.
name
๊ฐfield_name
. ๋ฌธ์๋ ์ด๋ฅผ ๋ฐ์ํ๋๋ก ์ ๋ฐ์ดํธ๋์ง ์์์ต๋๋ค(์ด๊ฒ์ด ์ํํ์ธ ์ด์ ์ ์ผ๋ถ์ ๋๋ค).์ค์ ๋ชจ๋ธ์ ๋ณด์ง ์๊ณ
FileEvent
๋ฅผ ๋๋ฒ๊ทธํ๋ ๊ฒ์ ์ฝ์ง ์์ต๋๋ค. ๋ค์ ์ฟผ๋ฆฌ๋ฅผ ์คํํ๋ฉด ์ด๋ป๊ฒ ๋ฉ๋๊น?