Total noob hier....
https://docs.djangoproject.com/en/2.1/ref/contrib/postgres/search/#postgresql -fts-search-configuration
Hallo @gotexis. django-filter macht im Wesentlichen zwei Dinge:
Wenn es keine Filter
Klasse gibt, die die gesuchte Abfrage erstellt, haben Sie zwei Möglichkeiten:
Filter.method
Funktion.Wenn Sie die Abfrage verallgemeinern können, wäre das Schreiben eines benutzerdefinierten Filter
besser wiederverwendbar, Filter.method
ist jedoch für einmalige Instanzen nützlich. Du würdest etwas schreiben wie:
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))
Wow, danke für deine Hilfe @rpkilby , bitte gib mir noch ein paar Tage Zeit, um diesen Code zu verdauen...
Im Moment schlage ich mir den Kopf mit Graphen-Django, das sich in Django-Filter integriert.
Ich hoffe, dies (idealerweise) mit GraphQL umsetzen zu können
Beachten Sie, dass es einige Probleme geben kann, wie graphene-django django-filter umhüllt. zB siehe #927
@rpkilby Ja, Sir
Es sieht aus wie es ist in der Tat jede Menge Probleme mit Graphene gegeben , wie unbeliebt Python + GraphQL als zu Knoten verglichen worden ist, und der Autor über das Projekt aufzugeben, würden Sie nicht zustimmen :)
Einer der neuesten, der auch mit django-filter zusammenhängt, ist, dass DjangoFilterConnectionField nicht mit Prefetching arbeitet, was zu Tonnen von Abfragen führt. Ich habe es versäumt, es zu debuggen, ich frage mich, ob Sie irgendwelche Erfahrungen haben, die Sie teilen können :)
Hilfreichster Kommentar
Hallo @gotexis. django-filter macht im Wesentlichen zwei Dinge:
Wenn es keine
Filter
Klasse gibt, die die gesuchte Abfrage erstellt, haben Sie zwei Möglichkeiten:Filter.method
Funktion.Wenn Sie die Abfrage verallgemeinern können, wäre das Schreiben eines benutzerdefinierten
Filter
besser wiederverwendbar,Filter.method
ist jedoch für einmalige Instanzen nützlich. Du würdest etwas schreiben wie: