рдореБрдЭреЗ рдПрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ рдХрд┐ 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
рддреЛ рд╢рд╛рдпрдж рдбреАрдЖрд░рдПрдл рджрд╕реНрддрд╛рд╡реЗрдЬ рдореЗрдВ рдЗрд╕рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рдлрд┐рд▓реНрдЯрд░ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдиреЗ рдХрд╛ рд╕реБрдЭрд╛рд╡ рджреЗрддреЗ рд╣реИрдВ:
http://www.django-rest-framework.org/api-guide/filtering/#specifying -a-filterset
рдФрд░ рдпрд╣ рдмреВрд▓рд┐рдпрдирдлрд┐рд▓реНрдЯрд░ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рд╕рднреА рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред
рджреЗрдЦреЗрдВ https://github.com/encode/django-rest-framework/pull/5113
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рд╣рд╛рдп @inakrinред рдЖрдкрдХреЛ
filters
рдХреЛrest_framework
рдЙрдк-рдкреИрдХреЗрдЬ рд╕реЗ рдЖрдпрд╛рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПредhttps://github.com/carlongibson/django-filter/blob/develop/django_filters/rest_framework/filters.py