Django-filter: django_filters.BooleanFilter рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рдФрд░ рдПрдХ рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдПрдХ рдмреВрд▓рд┐рдпрди рдлрд╝рд┐рд▓реНрдЯрд░ рдЙрд╕реА рддрд░рд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

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

рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ django_filters.BooleanFilter рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдмреВрд▓рд┐рдпрди рдлрд╝рд┐рд▓реНрдЯрд░ рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдкреНрд░рд╛рдкреНрдд рдмреВрд▓рд┐рдпрди рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдЕрд▓рдЧ-рдЕрд▓рдЧ рдХреНрд╡реЗрд░реА рдкреИрд░рд╛ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдореЙрдбрд▓ рд╕реЗ рд╡рд┐рд░рд╛рд╕рдд рдореЗрдВ рдорд┐рд▓рд╛ рдмреВрд▓рд┐рдпрди рдлрд╝рд┐рд▓реНрдЯрд░ рдкрд░рдо рдХреЗ рд╕рддреНрдп рдпрд╛ рдЕрд╕рддреНрдп рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рдмреВрд▓рд┐рдпрдирдлрд╝рд┐рд▓реНрдЯрд░ рджреНрд╡рд╛рд░рд╛ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рдкреИрд░рд╛ рдХреЛ рдпрд╛ рддреЛ рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ:
1 - "рд╕реЗрдЯ рдирд╣реАрдВ" рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд
2 - "рд╕рдЪ" рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд
3 - "рдЭреВрдареА" рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд
рдпрд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдпрд╣ рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдкрдХреНрд╖ рд╕реЗ рдмрд╛рдХреА рдПрдкреАрдЖрдИ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рдХреИрд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред

рдЙрджрд╛рд╣рд░рдг рдХреЛрдб:

model.py:
class TestModel(models.Model): first = models.BooleanField() last = models.BooleanField()
api.py

`рдЖрдпрд╛рдд django_filters
рдмрд╛рдХреА_рдлреНрд░реЗрдорд╡рд░реНрдХ рдЖрдпрд╛рдд рд╡реНрдпреВрд╕реЗрдЯ, рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ рд╕реЗ
рд╕реЗ .models рдЖрдпрд╛рдд TestModel

рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯрдлрд┐рд▓реНрдЯрд░ (django_filters.rest_framework.FilterSet):
first_and_last = django_filters.BooleanFilter(рд╡рд┐рдзрд┐ = 'first_and_last_filter')
def first_and_last_filter(рд╕реНрд╡рдпрдВ, рдХреНрд╡реЗрд░реАрд╕реЗрдЯ, рдирд╛рдо, рдорд╛рди):
рдЕрдЧрд░ рдореВрд▓реНрдп == рд╕рдЪ:
рд╡рд╛рдкрд╕реА queryset.filter (рдкрд╣рд▓рд╛ = рд╕рддреНрдп, рдЕрдВрддрд┐рдо = рд╕рддреНрдп);
рд╡рд╛рдкрд╕реА рдХреНрд╡реЗрд░реАрд╕реЗрдЯ;
рд╡рд░реНрдЧ рдореЗрдЯрд╛:
рдореЙрдбрд▓ = рдЯреЗрд╕реНрдЯрдореЙрдбрд▓
рдлрд╝реАрд▓реНрдбреНрд╕ = ['рдкреНрд░рдердо', 'рдЕрдВрддрд┐рдо', 'рдкреНрд░рдердо_рдФрд░_рдЕрдВрддрд┐рдо']

рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯрд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ (рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░ред рдореЙрдбрд▓рд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░):
рд╡рд░реНрдЧ рдореЗрдЯрд╛:
рдореЙрдбрд▓ = рдЯреЗрд╕реНрдЯрдореЙрдбрд▓
рдлрд╝реАрд▓реНрдб = ['рдкрд╣рд▓рд╛', 'рдЖрдЦрд┐рд░реА']

рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯ рд╡реНрдпреВрд╕реЗрдЯ (viewsets.ModelViewSet):
рдореЙрдбрд▓ = рдЯреЗрд╕реНрдЯрдореЙрдбрд▓
queryset = TestModel.objects.all ()
рд╕реАрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░_рдХреНрд▓рд╛рд╕ = рдЯреЗрд╕реНрдЯрд╕реЗрд░рд┐рдпрд▓рд╛рдЗрдЬрд╝рд░
filter_backends = (django_filters.rest_framework.DjangoFilterBackend,)
filter_fields = ('рдкреНрд░рдердо', 'рдЕрдВрддрд┐рдо', 'рдкреНрд░рдердо_рдФрд░_рдЕрдВрддрд┐рдо', )
рдлрд╝рд┐рд▓реНрдЯрд░_рдХреНрд▓рд╛рд╕ = рдЯреЗрд╕реНрдЯрдлрд╝рд┐рд▓реНрдЯрд░`

рдпрд╣рд╛рдВ рдкрд░реАрдХреНрд╖рдг рд╡реНрдпреВрд╕реЗрдЯ рдлрд╝рд┐рд▓реНрдЯрд░ "рдкреНрд░рдердо" рдФрд░ "рдЕрдВрддрд┐рдо" рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдХреНрд╡реЗрд░реА рдкрд░рдо рдХреЗ "рд╕рддреНрдп" рдпрд╛ "рдЧрд▓рдд" рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди "first_and_last" рдлрд╝рд┐рд▓реНрдЯрд░ рдлрд╝реАрд▓реНрдб рдХреЗ рд▓рд┐рдП рдпрд╣ 1,2 рдпрд╛ 3 рд╣реЛрдиреЗ рдХреА рдЕрдкреЗрдХреНрд╖рд╛ рдХрд░рддрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдлрд╝рд┐рд▓реНрдЯрд░рд┐рдВрдЧ рдХреНрд╡реЗрд░реА рдХреЛрд▓реНрдб рдЗрд╕ рддрд░рд╣ рд╣реЛ:
/рдПрдкреАрдЖрдИ/рдЯреЗрд╕реНрдЯ/?рдкреНрд░рдердо=рд╕рддреНрдп&рдлрд░реНрд╕реНрдЯ_рдФрд░_рдЕрдВрддрд┐рдо=2

рдпрд╣ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдореЗрдВ рдПрдХ рд╕рд░рд▓реАрдХреГрдд рдЙрджрд╛рд╣рд░рдг рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ рдХрд╕реНрдЯрдо рдлрд╝рд┐рд▓реНрдЯрд░ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрдЯрд┐рд▓ рддрд░реНрдХ рд╣реИред
рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╕рднреА рдХреЛрдб рдХреЗ рд╕рд╛рде рд░реЗрдкреЛ рд╕реНрдерд╛рдкрд┐рдд рдХрд┐рдпрд╛ рд╣реИред
https://github.com/inakrin/boolfilter

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

рд╣рд╛рдп @inakrinред рдЖрдкрдХреЛ filters рдХреЛ rest_framework рдЙрдк-рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

https://github.com/carlongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

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

рд╣рд╛рдп @inakrinред рдЖрдкрдХреЛ filters рдХреЛ rest_framework рдЙрдк-рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

https://github.com/carlongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py

рддреЛ рд╢рд╛рдпрдж рдбреАрдЖрд░рдПрдл рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдлрд┐рд▓реНрдЯрд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ:
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filterset
рдФрд░ рдпрд╣ рдмреВрд▓рд┐рдпрдирдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

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

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

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

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

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

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

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