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.

Reply via email to