Django-filter: рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ ArrayField

рдХреЛ рдирд┐рд░реНрдорд┐рдд 24 рдЕрдЧре░ 2016  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: carltongibson/django-filter

рдХреНрдпрд╛ django.contrib.postgres.fields рдЬреИрд╕реЗ ArrayField рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдлрд╝реАрд▓реНрдб рдХреЛ рдлрд╝рд┐рд▓реНрдЯрд░ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ?

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

django-filter рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдХреЙрдиреНрдЯреНрд░рд┐рдм рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХреЛрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред 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() рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЬреЛ рдЕрд╕рдВрд░рдЪрд┐рдд рд╣реИрдВ рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдВрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдВрдпреЛрдЬрди рд╣реИрдВред

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

django-filter рдореЗрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреЛрд╕реНрдЯрдЧреНрд░реЗрдЬрд╝ рдХреЙрдиреНрдЯреНрд░рд┐рдм рдлрд╝реАрд▓реНрдб рдХреЗ рд╕рд╛рде рд╕рдВрдЧрдд рдХреЛрдИ рдлрд╝рд┐рд▓реНрдЯрд░ рдирд╣реАрдВ рд╣реИ - рдЖрдкрдХреЛ рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдмрдирд╛рдирд╛ рд╣реЛрдЧрд╛ред рдЖрдк рдЬреЛ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЙрд╕рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдпрд╣ рдХрдо рдпрд╛ рдЬреНрдпрд╛рджрд╛ рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред 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() рдХреЙрд▓ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреБрдХреНрдд рд╣реИред

рджреВрд╕рд░реА рдУрд░, рдЗрдВрдбреЗрдХреНрд╕ рдФрд░ рд╕реНрд▓рд╛рдЗрд╕ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЛ рд╕рдВрднрд╛рд▓рдирд╛ рдереЛрдбрд╝рд╛ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рд╣реИ, рдЬреЛ рдЕрд╕рдВрд░рдЪрд┐рдд рд╣реИрдВ рдФрд░ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рд░реВрдк рд╕реЗ рдЕрдирдВрдд рдорд╛рддреНрд░рд╛ рдореЗрдВ рд╕рдВрдпреЛрдЬрди рд╣реИрдВред

рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред

рдореИрдВ рдЗрд╕реЗ рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рдХреЗ рд░реВрдк рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдкреНрд░рд▓реЗрдЦрд┐рдд, рдкрд░реАрдХреНрд╖рдг рдХрд┐рдП рдЧрдП рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реБрдИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдкреБрдирд░реНрд╡рд┐рдЪрд╛рд░ рдХрд░рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред

рдЕрджреНрдпрддрди:
рдкреИрд░рд╛рдореАрдЯрд░ name рдХрд╛ рдирд╛рдо рдмрджрд▓рдХрд░ field_name рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, MyFilterSet рдЗрд╕ рддрд░рд╣ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП:

class MyFilterSet(filters.FilterSet):
    tags__contains = CharArrayFilter(field_name='tags', lookup_expr='contains')

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

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

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

Alexx-G picture Alexx-G  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

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

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

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