Администратор django обрезает текст в list_display

Нужно обрезать текст в админке list_display

В модели администратора есть следующее, но по-прежнему отображается полный текст.

from django.template.defaultfilters import truncatewords

def get_description(self, obj):
    return truncatewords(obj.description, 10)
get_description.short_description = "description"

class DieTaskAdmin(admin.ModelAdmin):
    list_display =['severity','priority', 'subject', 'status','created',get_description.short_description']

admin.site.register(DieTask, DieTaskAdmin)

т.е. исходный текст поля описания содержит более 255 символов. Мне нравится отображать только первые 10 символов плюс...


person Stryker    schedule 27.10.2016    source источник


Ответы (3)


Мне пришлось создать свойство в модели, как показано здесь:

from django.template.defaultfilters import truncatechars
...

@property
    def short_description(self):
        return truncatechars(self.description, 35)

И используйте short_descriptioin в админке, чтобы обрезать текст.

person Stryker    schedule 27.10.2016

Лично я бы избегал использования шаблонных функций Django внутри методов/свойств модели. IMO - более чистое решение, вместо этого используйте собственный метод Python:

@property
def short_description(self):
    return self.description if len(self.description) < 35 else (self.description[:33] + '..')
person Ondra    schedule 19.12.2018

как насчет использования встроенного синтаксиса python

class DieTaskAdmin(admin.ModelAdmin):
    list_display =['severity','priority', 'subject', 'status','created','get_description']
    def get_description(self, obj):
        return obj.description[:10]
    get_description.short_description = "description"

admin.site.register(DieTask, DieTaskAdmin)
person hemraj    schedule 07.06.2020