Django-filter: рдХреНрдпрд╛ рдХреЛрдИ Django/Postgres рджреЗрд╢реА рдкреВрд░реНрдг рдкрд╛рда рдЦреЛрдЬ рдЗрдВрдЬрди рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗ рд╕рдХрддрд╛ рд╣реИ?

рдХреЛ рдирд┐рд░реНрдорд┐рдд 16 рдлрд╝рд░ре░ 2019  ┬╖  4рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: carltongibson/django-filter

рдпрд╣рд╛рдБ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдиреЛрдм ....

https://docs.djangoproject.com/hi/2.1/ref/contrib/postgres/search/#postgresql -fts-search-configuration

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

рд╣рд╛рдп @ рдЧреЛрдЯреЗрдХреНрд╕рд┐рд╕ред django-filter рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рдЗрдирдкреБрдЯ рдорд╛рдиреНрдп рдХрд░реЗрдВ
  • рдЙрди рдЗрдирдкреБрдЯ рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ

рдЬрдм рдХреЛрдИ Filter рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреА рдЬрд╛ рд░рд╣реА рдХреНрд╡реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдПрдХ рдирдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВ
  • Filter.method рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдХреНрд╡реЗрд░реА рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХрд╕реНрдЯрдо Filter рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ Filter.method рдПрдХрдмрд╛рд░рдЧреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ:

from django.contrib.postgres.search import SearchQuery, SearchVector
from djanog_filters import FilterSet, CharFilter

class F(FilterSet):
    # The model `field_name` is the field you want to search on and is passed to your `method`.
    # The `method` argument is the name of the method to call to perform filtering.
    search = CharFilter(field_name='body_text', method='search_fulltext')

    def search_fulltext(self, queryset, field_name, value):
        return queryset \
            .annotate(search=SearchVector(field_name)) \
            .filter(search=SearchQuery(value))

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

рд╣рд╛рдп @ рдЧреЛрдЯреЗрдХреНрд╕рд┐рд╕ред django-filter рдореВрд▓ рд░реВрдк рд╕реЗ рджреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ:

  • рдЗрдирдкреБрдЯ рдорд╛рдиреНрдп рдХрд░реЗрдВ
  • рдЙрди рдЗрдирдкреБрдЯ рд╕реЗ рдкреНрд░рд╢реНрдиреЛрдВ рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░реЗрдВ

рдЬрдм рдХреЛрдИ Filter рд╡рд░реНрдЧ рдирд╣реАрдВ рд╣реИ рдЬреЛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдЦреЛрдЬреА рдЬрд╛ рд░рд╣реА рдХреНрд╡реЗрд░реА рдХрд╛ рдирд┐рд░реНрдорд╛рдг рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЖрдкрдХреЗ рдкрд╛рд╕ рджреЛ рд╡рд┐рдХрд▓реНрдк рд╣реИрдВ:

  • рдПрдХ рдирдпрд╛ рдлрд╝рд┐рд▓реНрдЯрд░ рд╡рд░реНрдЧ рд▓рд┐рдЦреЗрдВ
  • Filter.method рд╕реБрд╡рд┐рдзрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред

рдпрджрд┐ рдЖрдк рдХреНрд╡реЗрд░реА рдХреЛ рд╕рд╛рдорд╛рдиреНрдпреАрдХреГрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рддреЛ рдХрд╕реНрдЯрдо Filter рд▓рд┐рдЦрдирд╛ рдЕрдзрд┐рдХ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╣реЛрдЧрд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ Filter.method рдПрдХрдмрд╛рд░рдЧреА рдЙрджрд╛рд╣рд░рдгреЛрдВ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИред рдЖрдк рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦреЗрдВрдЧреЗ:

from django.contrib.postgres.search import SearchQuery, SearchVector
from djanog_filters import FilterSet, CharFilter

class F(FilterSet):
    # The model `field_name` is the field you want to search on and is passed to your `method`.
    # The `method` argument is the name of the method to call to perform filtering.
    search = CharFilter(field_name='body_text', method='search_fulltext')

    def search_fulltext(self, queryset, field_name, value):
        return queryset \
            .annotate(search=SearchVector(field_name)) \
            .filter(search=SearchQuery(value))

рд╡рд╛рд╣ рдЖрдкрдХреА рдорджрдж рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж @rkilby , рдХреГрдкрдпрд╛ рдореБрдЭреЗ рдЗрд╕ рдХреЛрдб рдХреЛ рдкрдЪрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдФрд░ рджрд┐рди рджреЗрдВ ...

рдЕрднреА рдореИрдВ рдЕрдкрдиреЗ рд╕рд┐рд░ рдХреЛ рдЧреНрд░реИрдлреЗрди-рдбреАрдЬреЗрдВрдЧреЛ рд╕реЗ рдкреАрдЯ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдбреАрдЬреЗрдВрдЧреЛ-рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд╕рд╛рде рдПрдХреАрдХреГрдд рд╣реИред

рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ (рдЖрджрд░реНрд╢ рд░реВрдк рд╕реЗ) рдЗрд╕реЗ GraphQL рдХреЗ рд╕рд╛рде рд▓рд╛рдЧреВ рдХрд░реЗрдВ

рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ рдХреБрдЫ рд╕рдорд╕реНрдпрд╛рдПрдВ рд╣реЛ рд╕рдХрддреА рд╣реИрдВ рдХрд┐ рдХреИрд╕реЗ рдЧреНрд░реИрдлреЗрди-рдбреАрдЬреЗрдВрдЧреЛ рдбреАрдЬреЗрдВрдЧреЛ-рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЛ рд▓рдкреЗрдЯрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, #927 . рджреЗрдЦреЗрдВ

@rpkilby рд╣рд╛рдБ рд╕рд░
рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЧреНрд░рд╛рдлреАрди рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрджреНрджреЛрдВ рдХреЗ рдвреЗрд░ рд╣реИрдВ , рдпрд╣ рджреЗрдЦрддреЗ рд╣реБрдП рдХрд┐ рдиреЛрдб рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЕрд▓реЛрдХрдкреНрд░рд┐рдп рдкрд╛рдпрдерди + рдЧреНрд░рд╛рдлрдХреНрдпреВрдПрд▓ рдХреИрд╕реЗ рдмрди рдЧрдпрд╛ рд╣реИ, рд╕рд╛рде рд╣реА рд▓реЗрдЦрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЛ рдЫреЛрдбрд╝ рд░рд╣рд╛ рд╣реИ, рдХреНрдпрд╛ рдЖрдк рд╕рд╣рдордд рдирд╣реАрдВ рд╣реЛрдВрдЧреЗ :)

рд╕рдмрд╕реЗ рд╣рд╛рд▓рд┐рдпрд╛ рдореЗрдВ рд╕реЗ рдПрдХ, рдЬреЛ django-filter рд╕реЗ рднреА рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ, рдЙрдирдХрд╛ DjangoFilterConnectionField рдкреНрд░реАрдлрд╝реЗрдЪрд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдмрд╣реБрдд рд╕рд╛рд░реЗ рдкреНрд░рд╢реНрди рд╣реЛрддреЗ рд╣реИрдВред рдореИрдВ рдЗрд╕реЗ рдбреАрдмрдЧ рдХрд░рдиреЗ рдореЗрдВ рдЕрд╕рдлрд▓ рд░рд╣рд╛ рд╣реВрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рдЕрдиреБрднрд╡ рд╣реИ :)

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

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

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

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

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

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

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