Ich habe mich neulich mit Django entwickelt und brauchte eine Suchfunktion. Ich habe jedoch immer gefragt: "Nun, wie kann man das Schreiben eingrenzen?", Also habe ich es zusammengefasst. Ich würde mich freuen, wenn Sie auf zusätzliche Hinweise oder Fehler hinweisen könnten.
Das Django-Modell verfügt über ein Attribut namens object, das eine Instanz der Klasse "Manager" enthält.
Filter
ist eine Funktion, die in dieser Manager
-Klasse bereitgestellt wird. Dies ist nützlich, wenn Sie die gewünschten Daten buchstäblich filtern (eingrenzen) möchten.
Ich habe es eine strenge Suche genannt, aber ich werde eine Suche einführen, die die Suche eingrenzt, die genau dem Inhalt entspricht, den Sie filtern möchten.
Diese Suche sucht nach ** genauen Übereinstimmungen **, wobei zwischen Groß- und Kleinschreibung unterschieden wird.
Beispiel
user_name = "hoge" //Legen Sie den Benutzernamen fest, den Sie als Variable suchen möchten.
data = User.objects.filter(name=user_name)
Ruft das Namensfeld im Benutzermodell ab, das dem oben definierten Benutzernamen entspricht. Auf diese Weise können Sie sich auf diejenigen beschränken, die genau mit dem Namen hoge übereinstimmen.
Schauen wir uns als nächstes die lose Suche an. Es ist oft der Fall, wenn Sie sagen: "Ich weiß nicht, ob hoge genau zum Namen passt, aber ob Sie eine Person mit einem Namen wie ein wahnsinniger Programmierer namens hogefugafoo sind."
In einem solchen Fall wird diese lose Suche verwendet, wenn Sie nicht nur die suchen möchten, die genau zu "hoge" passt, sondern auch **, die ** "hoge" ** enthält.
Feldname __contains = Wert
Feldname __startswith = Wert
Feldname __endswith = Wert
ist.
Mal sehen, wie man es konkret benutzt.
user_name = "fuga"
data = User.objects.filter(name__contains=user_name)
Jetzt können Sie auch "hogefugafoo" bekommen. Gleiches gilt für andere Suchanfragen.
user_name = "fuga"
data = User.objects.filter(name__startswith=user_name)
In diesem Fall stimmt "hogefugafoo" nicht überein, da es mit "fuga" beginnt, "fuga Taro" jedoch.
user_name = "fuga"
data = User.objects.filter(name__endswith=user_name)
In diesem Fall stimmt "hogefugafoo" nicht überein, "Yamada johnfuga" jedoch.
Jetzt möchten Sie möglicherweise eine lockerere Suche durchführen, bei der nicht zwischen Groß- und Kleinschreibung unterschieden wird.
In einem solchen Fall fügen Sie einfach ** i
** hinzu.
Feldname __iexact = Wert
Feldname __icontains = Wert
-Suche beginnend mit ** **
Feldname __istartswith = Wert
-Suche endet mit ** **
Feldname __iendswith = Wert
Vielen Dank für das Lesen bis zum Ende. Ich werde zu einem späteren Zeitpunkt über numerische Suche und UND-Suche ODER Suche mit mehreren Bedingungen schreiben. Vielen Dank für Ihre Mitarbeit.
Recommended Posts