filtr na dropdownu v adminu

10 views
Skip to first unread message

MirekZv

unread,
Dec 10, 2017, 7:06:41 AM12/10/17
to django-cs
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...

Reply all
Reply to author
Forward
0 new messages