django-grappelli-custom-autocomplete

Customize the template for autocomplete lookups.


License
BSD-3-Clause
Install
pip install django-grappelli-custom-autocomplete==1.4.1

Documentation

django-grappelli-custom-autocomplete

This library gives you the ability to customize the display of the grappelli FK / M2M autocomplete lookup.

Customize the dropdown contents and preview contents in an FK Autocomplete: Screenshot of custom FK lookup

Customize the dropdown contents and preview contents in an M2M Autocomplete: Screenshot of custom M2M lookup

Improved UX for deletion on M2M: Better M2M delete display

Requirements

Requires Django and django-grappelli

Installation

  1. pip install django-grappelli-custom-autocomplete
  2. Add 'django_grappelli_custom_autocomplete' to your INSTALLED_APPS list in your project's settings.py
  3. Add to custom urls to urls.py: url(r'^grappelli_custom_autocomplete/', include('django_grappelli_custom_autocomplete.urls')),

Usage

#models.py
class Image( BaseImage ):

    #...Your fields here...
    

    """
    1. Define the following three functions on the model to return custom 
    autocomplete markup:
    """
    def custom_related_dropdown_label(self):
        #This is the HTML that gets used in the dropdown selector.
        return "%s<br /><img src='%s' width='100' />" % (self.title, self.thumbnail.url)
    

    def custom_related_fk_selected_display(self):
        #This is the HTML that gets inserted next to the FK selector to 
        return "<img src='%s' width='100' />" % (self.thumbnail.url)
   
    def custom_related_m2m_selected_display(self):
        #This is the HTML that gets used in the M2M list
        return "<img src='%s' height='35' /> %s " % (self.thumbnail.url, self.title)

#admin.py
from django_grappelli_custom_autocomplete.admin import CustomAutocompleteMixin, CustomAutocompleteTabularMixin

class PageAdmin(CustomAutocompleteMixin, admin.ModelAdmin):
    """
    2. Add the admin mixin "CustomAutocompleteMixin" to your admin class. 
    3. Define "custom_autocomplete_lookup_fields" as you would with the
       "autocomplete_lookup_fields."
    """
    
    fields = ['title', 'thumbnail', 'slides']
    raw_id_fields = ['thumbnail', 'slides']
    custom_autocomplete_lookup_fields = {
        'fk':['thumbnail'],
        'm2m': ['slides']
    }

class SlideInlineAdmin(CustomAutocompleteTabularMixin, admin.TabularInline):
    
    fields = ['title', 'thumbnail', 'slides']
    raw_id_fields = ['thumbnail', 'slides']
    custom_autocomplete_lookup_fields = {
        'fk':['thumbnail'],
        'm2m': ['slides']
    }