1.x μ΄μ μ CharFilterμ ν¨κ» CSVWidgetμ μ¬μ©νκ³ μμμ§λ§ μ κ·Έλ μ΄λ μ€μ΄λ©° ν΄λΉ μ‘°ν©μ΄ λ μ΄μ μλνμ§ μμ΅λλ€. 무μμΌλ‘ μ νν΄μΌ νλμ§μ λν λ¬Έμλ κΆμ₯ μ¬νμ μ°Ύμ μ μμ΅λλ€. μΌνλ‘ κ΅¬λΆλ λ¨μΌ κ° λλ μ¬λ¬ κ°μ μλ½νκ³ μΆμ΅λλ€.
λ€μκ³Ό κ°μ΄ μλν΄ λ³΄μΈμ.
class CharInFilter(django_filters.BaseInFilter, django_filters.CharFilter):
pass
λλμ΄ λ¬Έμ μ μ§λ©΄νλ λ° μκ°μ 보λκ³ @carltongibson μ루μ μ΄ νμ€ν λͺ κ°μ§ λ¬Έμ μ λμμ΄ λλ€κ³ μκ°ν©λλ€.
λλ λ€μκ³Ό κ°μ΄νλ €κ³ νμ΅λλ€.
class TestListFilter(Filter):
field_class = forms.CharField
def filter(self, qs, value):
actual_filter = fields.Lookup(value, 'in')
from pprint import pprint
pprint(value)
pprint(actual_filter)
return qs
class BaseModelFilter(filters.FilterSet):
id__in = TestListFilter(name='id', lookup_expr='in', widget=widgets.CSVWidget)
DRF λ° URL μ¬μ©: ?id__in=a,b,c
κ·Έλ¬λ widget=widgets.CSVWidget
μ¬μ©νλ κ²μ²λΌ μ€μ λ‘ λͺ©λ‘μ μ΄λ»κ²λ λ¬Έμμ΄λ‘ μΊμ€ν
νλ κ² κ°μ΅λκΉ?
νν° κ°μ μΈμνλ©΄ "['a', 'b', 'c']"
real_filterμλ λ°μ΄νκ° μμ΅λλ€.
Lookup(value="['a', 'b', 'c']", lookup_type='in')
μ 곡λ κΆμ₯ μ¬νμ λ°λΌ λ€μκ³Ό κ°μ΄ μ νν©λλ€.
class UUIDInFilter(filters.BaseInFilter, filters.UUIDFilter):
pass
class BaseModelFilter(filters.FilterSet):
id = UUIDInFilter(name='id', lookup_expr='in')
κ·Έλ° λ€μ ?id=3e543ed4-9b90-403d-8f40-048297a9ac31,6bf953eb-3ac3-4ea1-8ce5-9f84dd392246
λ₯Ό μ¬μ©ν μ μμμ΅λλ€.
μμ κ²°κ³Όλ₯Ό μ»κΈ° μν΄.
"λ¬Έμμ΄λ‘ λμ΄"μ μΌμ’ μ λ²κ·Έ λλ μ΅μν μΌλΆ λ¬Έμ λ³κ²½ μ¬νμ²λΌ 보μ λκΉ? κΈ°λ³Έ κΈ°λ₯μ΄ μ΄λ»κ² μλνλμ§ μ λͺ¨λ₯΄κ² μ΅λλ€. μλ§λ κ·Έκ²μ λ¨μ§ μ¬μ© μ€λ₯ μΌ κ²μ λλ€ =)
CSVWidget
λ κ° λͺ©λ‘μ μ¬λ°λ₯΄κ² λ°ννμ§λ§ CharField.clean()
λ λͺ©λ‘μ λ€μ ν
μ€νΈ κ°μΌλ‘ κ°μ λ³ννλ―λ‘ "['1', '2', '3']"
μ
λλ€. CSVWidget
λ₯Ό νν°μ μ λ¬νλ κ²λ§μΌλ‘λ μΆ©λΆνμ§ μμ΅λλ€. κ° λͺ©λ‘μ νμ©νλ €λ©΄ μμ νλλ₯Ό μ¬μ μν΄μΌ ν©λλ€.
μ¬λ°λ₯Έ νλ λμμ μ»λ κ°μ₯ μ¬μ΄ λ°©λ²μ BaseCSVFilter
νΌν©νλ κ²μ
λλ€. κ° λͺ©λ‘μ νμ©νλ μμ νλλ₯Ό μ¬λ°λ₯΄κ² ꡬμ±νκΈ° λλ¬Έμ
λλ€.
κ°μ₯ μ μ©ν λκΈ
CSVWidget
λ κ° λͺ©λ‘μ μ¬λ°λ₯΄κ² λ°ννμ§λ§CharField.clean()
λ λͺ©λ‘μ λ€μ ν μ€νΈ κ°μΌλ‘ κ°μ λ³ννλ―λ‘"['1', '2', '3']"
μ λλ€.CSVWidget
λ₯Ό νν°μ μ λ¬νλ κ²λ§μΌλ‘λ μΆ©λΆνμ§ μμ΅λλ€. κ° λͺ©λ‘μ νμ©νλ €λ©΄ μμ νλλ₯Ό μ¬μ μν΄μΌ ν©λλ€.μ¬λ°λ₯Έ νλ λμμ μ»λ κ°μ₯ μ¬μ΄ λ°©λ²μ
BaseCSVFilter
νΌν©νλ κ²μ λλ€. κ° λͺ©λ‘μ νμ©νλ μμ νλλ₯Ό μ¬λ°λ₯΄κ² ꡬμ±νκΈ° λλ¬Έμ λλ€.