Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Django admin listview Customize Column Name

Ok so I have a custom django admin built from a Author Model:

class AuthorAdmin(admin.ModelAdmin):
    """
    Author Admin
    """
    form = AuthorForm

    list_display = ['profile_photo', 'first_name', 'last_name', 'title']
    search_fields = ['first_name', 'last_name', 'title', 'credential']
    prepopulated_fields = {'slug': ('first_name', 'last_name', 'title')}

    def profile_photo(self, obj) :
        return '<img src="%s" title="%s" />' % (resize_image(obj.photo, '100x100'), obj.title)

    profile_photo.allow_tags = True

But in the django admin listview the column title for the custom column does not have proper capitalization. capitalization matters dammit!

Does anyone know how to override the column headers that are built from custom function's names?

I've tried:

def my_function(self, obj) :
    """My Custom Title"""
    ...

and

def my_function(self, obj) :
    class Meta:
        verbose_name = _(u"My Custom Title")
like image 780
Francis Yaconiello Avatar asked Mar 14 '12 19:03

Francis Yaconiello


2 Answers

Use:

class AuthorAdmin(admin.ModelAdmin):
    …
    def my_function(self, obj) :
        """My Custom Title"""
    …
    my_function.short_description = 'This is the Column Name'

It's buried in the admin docs. short_description, specifically, is barely mentioned under the discussion of list_display (more by example than actually called out). The other items like this are similiarly buried in the admin docs, but here's a summary:

  • short_description: the column title to use (string)
  • allow_tags: what the name says... let's you use HTML (True or False)
  • admin_order_field: a field on the model to order this column by (string, field name)
  • boolean: indicates the return value is boolean and signals the admin to use the nice graphic green check/red X (True or False)
like image 69
Chris Pratt Avatar answered Nov 17 '22 15:11

Chris Pratt


Starting from Django 3.2 you can use the display decorator. It has the attribute description for changing the name of the column:

class AuthorAdmin(admin.ModelAdmin):

    list_display = ['profile_photo', 'first_name', 'last_name', 'title']

    @admin.display(description='Profile Photo')
    def profile_photo(self, obj) :
        return '<img src="%s" title="%s" />' % (resize_image(obj.photo, '100x100'), obj.title)

For more info about the display decorator see this page

like image 43
Marco Avatar answered Nov 17 '22 14:11

Marco