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:

> Nemám na to moc času, zatím mně z toho ale vychází, že, jakkoli mám rád ty 
> stránky simpleisbetterthancomplex, tak tady to je asi ztráta času a krok 
> nesprávným směrem.
> A že správně bude použít django-autocomplete-light, který nejspíš přesně 
> všechno toto řeší.
>
> Dne pátek 26. února 2021 v 10:25:08 UTC+1 uživatel MirekZv napsal:
>
>> Mám ne moc minimalistické, ale pro reálné projekty nutné požadavky na 
>> popupy (select+options) ve formulářích:
>> 1. ajaxem získávané options (mimo admin i v něm) - všude a vždy, i když 
>> kdyby to umělo automaticky vypnout, když je v modelu méně než např. 100 
>> položek, nevadilo by,
>> 2. dynamický filtr pro options, zejména když jsou relačně závislé popupy 
>> (opět mimo admin i v adminu, včetně inlinů); příklad: country & city: jen 
>> cities z vybrané country mají být na výběr.
>>
>> Implementoval jsem toto
>>
>> https://simpleisbetterthancomplex.com/tutorial/2018/01/29/how-to-implement-dependent-or-chained-dropdown-list-with-django.html
>> včetně funkcionality (2) v inlinech a dokážu to zprovoznit.
>>
>> Ale je zatím dost individuální práce pro každý případ, lepší by bylo něco 
>> generického.
>> A neřeší to ten ajax.
>>
>> Je nějaká rozumná cesta, jak dosáhnout (1)+(2) všude v aplikaci?
>> Které packages přidat do projektu? django-autocomplete-light? a ještě 
>> něco?
>>
>> Díky...
>> PS: samozřejmě, když jsem šel na Django, tak jsem se domníval, že tam jdu 
>> proto, že takovéto věci dělá out-of-the-box. Ach ta moje naivita.
>>
>> Best regards,
>> Mirek
>>
>

-- 
-- 
E-mailová skupina django-cs@googlegroups.com
Správa: http://groups.google.cz/group/django-cs
--- 
Tuto zprávu jste obdrželi, protože jste přihlášeni k odběru skupiny django-cs 
ve Skupinách Google.
Chcete-li zrušit odběr skupiny a přestat dostávat e‑maily ze skupiny, zašlete 
e-mail na adresu django-cs+unsubscr...@googlegroups.com.
Chcete-li zobrazit tuto diskusi na webu, navštivte 
https://groups.google.com/d/msgid/django-cs/b7e135a8-66e0-4b97-9087-c00fa5b81325n%40googlegroups.com.

Reply via email to