Django-filter: CharFilter(widget=CSVWidget) рдЕрдм 1.x . рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдордИ 2017  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: carltongibson/django-filter

рдореИрдВ рдкреВрд░реНрд╡ 1.x рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдЪрд╛рд░рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде CSVWidget рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореИрдВ рдЕрдкрдЧреНрд░реЗрдб рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рд╡рд╣ рд╕рдВрдпреЛрдЬрди рдЕрдм рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдХрд┐рд╕ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╣реИ, рдЗрд╕ рдкрд░ рдХреЛрдИ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдпрд╛ рдЕрдиреБрд╢рдВрд╕рд╛ рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИред рдореИрдВ рдЕрд▓реНрдкрд╡рд┐рд░рд╛рдо рджреНрд╡рд╛рд░рд╛ рдЕрд▓рдЧ рдХрд┐рдП рдЧрдП рдПрдХрд▓ рдорд╛рди рдпрд╛ рдПрдХрд╛рдзрд┐рдХ рдорд╛рдиреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛/рдЪрд╛рд╣рддреА рд╣реВрдВ

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

CSVWidget рдореВрд▓реНрдпреЛрдВ рдХреА рдПрдХ рд╕реВрдЪреА рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рд▓реМрдЯрд╛ рд░рд╣рд╛ рд╣реИ, рд╣рд╛рд▓рд╛рдВрдХрд┐ CharField.clean() рд╕реВрдЪреА рдХреЛ рдПрдХ рдЯреЗрдХреНрд╕реНрдЯ рдорд╛рди рдореЗрдВ рд╡рд╛рдкрд╕ рд▓реЗ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП "['1', '2', '3']" ред рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ CSVWidget рдкрд╛рд╕ рдХрд░рдирд╛ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рд╣реИ - рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдлрд╝реЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рд╕рд╣реА рдлрд╝реАрд▓реНрдб рд╡реНрдпрд╡рд╣рд╛рд░ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рддрд░реАрдХрд╛ BaseCSVFilter рдХреЛ рдорд┐рд▓рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ рдареАрдХ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рд╕рднреА 3 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреБрдЫ рдРрд╕рд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдВ:

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']"
рд╡рд╛рд╕реНрддрд╡рд┐рдХ_рдлрд┐рд▓реНрдЯрд░ рдореЗрдВ рдЙрджреНрдзрд░рдг рднреА рд╣реИрдВ
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 рдХреЛ рдорд┐рд▓рд╛рдирд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдПрдХ рдлреЙрд░реНрдо рдлрд╝реАрд▓реНрдб рдХреЛ рдареАрдХ рд╕реЗ рдмрдирд╛рддрд╛ рд╣реИ рдЬреЛ рдорд╛рдиреЛрдВ рдХреА рд╕реВрдЪреА рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

gotexis picture gotexis  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

csarcom picture csarcom  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

techdragon picture techdragon  ┬╖  5рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

gsvr picture gsvr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

blueyed picture blueyed  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ