Tak jsem si trochu osvěžil paměť.
V Adminu má Django od verze 2.0 autocomplete_fields, což jsou relační pole (ForeignKey, ManyToManyField), které si dohledávají pro svůj widget přes ajax obsah na adrese autocomplete/.
Komunikuje to se .search_fields atributem odkazovaného ModelAdminu, který určuje, ve kterých polích se má vyhledávat to, co uživatel zapíše do popup widgetu. To může být nahrazeno metodou .get_search_results().
Implementace Djanga je slabá (alespoň ve 2.0, ale myslím, že ani později se na to nesáhlo) v tom, že nedokážou rozlišit 2 různé ForeignKey, směřující do stejného modelu. Např. když budete mít v modelu pole "Zadal" a "Schválil", obě směřující do User modelu, nedokážete rozlišit, které právě zadáváte a jak se mají filtrovat dostupné možnosti.
Lze udělat trik s rozšířením Referer adresy (request.headers['Referer']) o např. ?key=..., takže .get_search_results() pak může najít, které ForeignKey po něm požaduje výsledky.
Kdysi jsem si s tím už hrál a v
github.com/pyutil/django-admin-autocomplete-all je to implementováno (a trochu popsáno včetně příkladu volání) v autocomplete_all/js/autocomplete_params.js. Spíš snad jako inspirace, protože za zrovna tuto package bych ruku do ohně nedal.
Django 2+ autocomplete_fields ale nepomůžou mimo Admin, takže je opravdu otevřená otázka, jakou cestou jít:
Zda se snažit použít django-autocomplete-light všude a kašlat na Dj2 autocomplete_fields
nebo zda v Adminu upřednostnit zmíněnou nativní vymoženost.
Dne úterý 2. března 2021 v 11:08:31 UTC+1 uživatel MirekZv napsal: