wie Accent-insensitive Filter in Django mit Postgres haben?

8

Hi Ich finde, dass wir in der Postgres-Datenbank die Standard-Akzentempfindlichkeit (bei alten Mail-Exchanges) nicht konfigurieren können.

Gibt es eine Möglichkeit, dass ein _icontains auch für spezielle Zeichen unempfindlich ist (é, è, è, ç, ï) oder ich postgres regex verwenden muss, um beide Seiten durch _iregex zu ersetzen (ç- & gt; c, é- & gt; e ...)?

bearbeiten: Diese Frage ist alt und wird für Benutzer von django vor 1.8 aufbewahrt. Für diejenigen, die die neuesten Django-Versionen verwenden, hier der neue Weg: Ссылка

    
christophe31 11.04.2011, 10:16
quelle

5 Antworten

7

EDIT: Django 1.8 macht Akzent unsensitive Suche nach Postgresql Built-in. Ссылка

Tatsächlich gibt es in postgres contr (8.4+) eine unakzente Funktion, um leicht zu suchen:

für Postgres 9 / 8.5:

für Postgres 8.4:

hier ein Anwendungsbeispiel aus django:

%Vor%

Sie können die Anwendung "uncacent" bei der Textsuche vor dem Vergleich anwenden.

Option, die ich gemacht habe, ist:

%Vor%

Verwenden Sie diese Datei base.py in einem Ordner und verwenden Sie diesen Ordner als db backend. ictontains und istartswith sind nun fall- und akzentunempfindlich.

    
christophe31 26.04.2011, 07:20
quelle
7

Ich habe es geschafft, unaccent von postgresql contrib zu installieren, aber diese Antwort, die Patches django hat nicht funktioniert. load_backend on django.db.utils erzwingt, dass der Backend-Name mit django.db.backends beginnt.

Die Lösung, die für mich funktionierte, bestand darin, diesen Code in eines meiner Module einzufügen:

%Vor%

Nun funktionieren inaccent Suchanfragen, sogar innerhalb von django admin! Danke für deine Antwort oben!

    
bbrik 15.09.2011 12:45
quelle
1

Ich glaube nicht, dass Sie in der Lage sein werden, die Standard-Django-Feldsuche zu verwenden, es sei denn, Sie speichern eine nicht akzentuierte Version Ihres Textes in einer anderen Spalte und führen die Suche dort durch. Sie könnten eine doppelte Spalte mit editable = False hinzufügen und die save () -Methode des Modells überschreiben, um dieses Feld vom ursprünglichen Text mit Akzent zu aktualisieren.

Python: Entfernen Akzente von Unicode

PostgreSQL Wiki: Streichen Sie Akzente von Strings und geben Sie sie in Kleinbuchstaben aus

    
shadfc 11.04.2011 12:53
quelle
1

Ich habe gerade (vor ein paar Tagen) die Django-unaccent-Bibliothek veröffentlicht, die Operatoren zum Django-ORM für die inaktive Suche hinzufügt. Es passt das Django-ORM an und verwendet dazu die Funktion unaccent() von Postgres.

Bitte, check das aus = & gt; Ссылка

    
djcoin 30.05.2012 20:21
quelle
0

Ich arbeite an einem inakzenten Suchfeld für django und postgreSQL. Es ist auf Github: Ссылка

Es funktioniert jetzt gut, aber es braucht noch viel Arbeit. Ich benutze es und es zeigt keine Probleme für den Moment.

Die Art der Verwendung besteht darin, einen neuen Manager für das Modell zu erstellen, in dem uncents gesucht werden soll (sehen Sie sich das Beispiel an, das am Ende von manager.py Datei im Projekt).

Die Suchvorgänge, die ich bereits implementiert habe, sind:

  

"__ aexakt"

     

"__ aiexact"

     

"__ acontains"

     

"__ aicontains"

Sie sind äquivalent zu den allgemeinen Feldsuchen, die mit django geliefert werden:

  

"__ genau"

     

"__ iexact"

     

"__ enthält"

     

"__ icontains"

mit dem Unterschied, dass sie für die am häufigsten verwendeten Akzentzeichen "akzentunempfindlich" sind.

    
marianobianchi 22.05.2012 03:27
quelle

Tags und Links