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:
