django.contrib.postgres.fields
์ ๊ฐ์ด ArrayField
django.contrib.postgres.fields
์ ์๋ ํ๋๋ฅผ ํํฐ๋งํ ์ ์์ต๋๊น?
django-filter์๋ ํ์ฌ postgres ๊ธฐ์ฌ ํ๋์ ํธํ๋๋ ํํฐ๊ฐ ์์ต๋๋ค. ์ง์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋น์ ์ด ํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋ฐ๋ผ ๋ค์ ์ด๋ ค์ธ ๊ฒ์
๋๋ค. ArrayField
๋ํ ์ฌ์ฉ์ ์ง์ ์กฐํ ๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.
class CharArrayFilter(filters.BaseCSVFilter, filters.CharFilter):
pass
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
GET http://localhost/api/something-taggable?tags__contains=a,b,c
์์ ํํฐ๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ์
๋ ฅ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ๊ธฐ๋ณธ .filter()
ํธ์ถ์ ์ ํฉํ ์ ๋ฆฌ๋ ๊ฐ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.
๋ฐ๋ฉด, ๋น๊ตฌ์กฐ์ ์ด๋ฉฐ ์ด๋ก ์ ์ผ๋ก ๋ฌดํํ ์กฐํฉ์ ๊ฐ๋ ์ธ๋ฑ์ค ๋ฐ ์ฌ๋ผ์ด์ค ๋ณํ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค.
์ ๋ณด ๊ฐ์ฌํฉ๋๋ค.
๋น๋ถ๊ฐ์ Out of Scope๋ก ์ข ๋ฃํ๊ฒ ์ต๋๋ค. ๋ฌธ์ํ๋๊ณ ํ ์คํธ๋ pull ์์ฒญ์ ๊ณ ๋ คํ๊ฒ ๋์ด ๊ธฐ์ฉ๋๋ค. ์ฐ๋ฆฌ๋ ๋ฏธ๋์ ์ฌ๊ณ ํ ์ ์๋ ๋ฅ๋ ฅ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์
๋ฐ์ดํธ:
name
๋งค๊ฐ๋ณ์์ ์ด๋ฆ์ด field_name
๋์์ผ๋ฏ๋ก MyFilterSet
๋ ๋ค์๊ณผ ๊ฐ์์ผ ํฉ๋๋ค.
class MyFilterSet(filters.FilterSet):
tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')
class Meta:
model = SomethingTaggable
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
django-filter์๋ ํ์ฌ postgres ๊ธฐ์ฌ ํ๋์ ํธํ๋๋ ํํฐ๊ฐ ์์ต๋๋ค. ์ง์ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋น์ ์ด ํ๋ ค๊ณ ํ๋ ๊ฒ์ ๋ฐ๋ผ ๋ค์ ์ด๋ ค์ธ ๊ฒ์ ๋๋ค.
ArrayField
๋ํ ์ฌ์ฉ์ ์ง์ ์กฐํ ๋ฅผ ์ง์ํ๋ ๊ฒ์ ๋งค์ฐ ๊ฐ๋จํฉ๋๋ค.์์ ํํฐ๋ ์ผํ๋ก ๊ตฌ๋ถ๋ ์ ๋ ฅ์ ์ ํจ์ฑ์ ๊ฒ์ฌํ๊ณ ๊ธฐ๋ณธ
.filter()
ํธ์ถ์ ์ ํฉํ ์ ๋ฆฌ๋ ๊ฐ ๋ชฉ๋ก์ ๋ฐํํฉ๋๋ค.๋ฐ๋ฉด, ๋น๊ตฌ์กฐ์ ์ด๋ฉฐ ์ด๋ก ์ ์ผ๋ก ๋ฌดํํ ์กฐํฉ์ ๊ฐ๋ ์ธ๋ฑ์ค ๋ฐ ์ฌ๋ผ์ด์ค ๋ณํ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ ์กฐ๊ธ ๋ ๋ณต์กํฉ๋๋ค.