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...
--
--
E-mailová skupina [email protected]
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 [email protected].
Chcete-li zobrazit tuto diskusi na webu, navštivte
https://groups.google.com/d/msgid/django-cs/ae5f3930-6507-46d1-9165-5607c054c94b%40googlegroups.com.
Další možnosti najdete na adrese https://groups.google.com/d/optout.