Leider hat Djangos ORM nichts eingebautes für umgekehrte LIKEs. Aber eine Klausel .extra()
kann es ein bisschen einfacher als eine rohe Abfrage machen.
habe ich so etwas wie diese:
qs.extra(
where=['''%s LIKE %s.%s'''],
params=(
"string to match",
FooModel._meta.db_table,
"bar_field",
),
)
Die Probleme mit dem Code oben ist, dass
1) nicht mit SQLite-Backend in dieser Form ("Syntaxfehler in der Nähe von" nicht funktioniert, es funktioniert mit Tabellen-/Spaltennamen, die in Abfragen fest codiert sind ... was nicht immer sicher und immer hässlich ist);
und 2) es erfordert FooModel.bar_field Daten haben %in like style%
so kann man nicht beliebige Zeichenkette übereinstimmen (dies kann mit einer Abfrage wie %s LIKE CONCAT("%", %s.%s, "%")
festgelegt werden, aber es wird es DBMS-spezifisches machen, was nicht gut ist).
Reversed LIKE selbst sollte wahrscheinlich mit jedem größeren DBMS funktionieren, aber ich habe es nur auf SQLite und Postgres getestet.
Vielleicht soll jemand meine Lösung verallgemeinern und einen wiederverwendbaren, DBMS-unabhängigen App mit speziellem Unterklasse queryset/Manager/Q-Objekt für diese spezifische Aufgabe erstellen ...
Es wird eine normale 'LIKE' Abfrage erzeugt, keine umgekehrte. –