Autocomplete políčko v admin rozhraní

Potřeboval jsem přidat do administračního formuláře Django aplikace políčko, které by namísto <select> seznamu (nepoužitelného, kvůli velké spoustě položek) mělo nějakou formu AJAXové našeptávače.

Náhodou jsem narazil na video, jehož autorem je Jannis Leidel. Kód pro toto řešení naleznete ve výborné aplikaci django-extensions (kterou mimochodem nasazuji do každého nového Django projektu).

Samotné zprovoznění je velmi jednoduché. Stačí, aby jste v souboru admin.py vaší aplikace odvodili administrační třídu z bázové třídy django_extensions.admin.ForeignKeyAutocompleteAdmin (namísto django.contrib.admin.ModelAdmin) a uvedli atribut related_search_fields (říká, která pole budou nahrazena autocomplete políčkem, a která pole v propojeném modelu budou prohledávána):


class EventAdmin(ForeignKeyAutocompleteAdmin):
    list_display = ("title", "category", "organizer")
    list_filter = ("published", "term_type", "category", )
    search_fields = ("slug", "title", "annotation", )
    date_hierarchy = 'begin_datetime'
    prepopulated_fields = {"slug": ("title",)}
    form = EventAdminForm
    fieldsets = (
        (None, {
            'fields': ('title', 'category', 'organizer',
                'annotation', 'content', 'published', )
        }),
        (u'Termín konání akce', {
            'fields': ('term_type', 'accurate_term',
                'rough_term', 'regular_term', )
        }),
        (u'Pokročilá nastavení', {
            'classes': ('collapse', ),
            'fields': ('slug', 'tags', )
        }),
    )
    related_search_fields = {
        'organizer': ('title', ),
    }

Poznámka: tlustým řezem jsou zobrazeny změny, které musíte ve svém modelu provést.

Teď už stačí přidat symlink do MEDIA_ROOT adresáře vedoucí na django_extensions/media/django_extensions a je hotovo. Takhle vypadá výsledek:

Nasazením ForeignKeyAutocompleteAdmin se pole Organizátor změní v našeptávač

Blog comments powered by Disqus