Ahoj,
dejme tomu, že mám tabulku Osoba a v ní boolean příznak Aktivni.
Nyní bych chtěl třeba při zadání Produkt v adminu vybírat ne ze všech osob, ale jen z aktivních osob.
To jsem dosáhl, a sice nějak takto:
def formfield_for_foreignkey(self, db_field, request, **kwargs):
if db_field.name == "zodpovedna_osoba":
kwargs["queryset"] = Person.objects.filter(aktivni=True)
return super().formfield_for_foreignkey(db_field, request, **kwargs)
Funguje mi to docela dobře v ModelAdmin třídách, i v Inlinech.
Moje otázky:
1)
Je formfield_for_foreignkey() vhodné řešení, nebo radši něco jiného?
To chování jsem implementoval zatím v Adminu.
Ale zdá se mi, že to je spíš obecná záležitost, a patřilo by to přímo do modelu. (tam ale formfield_for_foreignkey() není)
2)
Nelíbí se mi chování při přidání další nové osoby. Nevíte o nějaké django-xxxx package, která by řešila následující:
Za dropdownem výběru osoby mám tlačítko [+] (používám django-jet, ale snad to je i ve standardním adminu), a když ho zmáčknu, jdu hned do přidání nové osoby.
To se mi zdá hloupé, protože to uživatele povzbuzuje k vytváření duplicit (osoba tam už je, ale uživatel ji nevidí, protože není aktivní).
Potřeboval bych nějaké takovéto chování:
a) prověří se, že existují záznamy nevyhovující filtru; pokud Ano, zobrazí se info uživateli a dropdown se odfiltruje na všechny (i neaktivní),
nebo ještě lépe b) prověří se, že existují záznamy nevyhovující filtru; pokud Ano, nabídnou se jen filtru nevyhovující (např. v modálním dialogu) s možností výběru + tlačítkem Jiná osoba...
Díky za tipy...