Краткое описание свойства Django

кто-нибудь знает, как добавить собственное имя к свойству в модели Django? Например, если я получил свойство:

@property
def my_property(self):
     return u'Returns some calculations'

и я показываю это в админке как столбец:

class MyAdmin(admin.ModelAdmin):
    list_display=['my_property',]

Затем я вижу столбец «Моя собственность», и мне нужен столбец «Свойство X». Я пробовал с my_property.short_description и my_property.verbose_name, ничего из этого не работает.


person alekwisnia    schedule 30.08.2011    source источник


Ответы (7)


Решение Masatsugu Hosoi отлично работает, но вы также можете использовать декоратор и установить short_description в методе получения свойства (fget):

@property
def my_property(self):
    return u'Returns some calculations'
my_property.fget.short_description = u'Property X'
person bbrik    schedule 08.12.2015

Я также добавил поле в класс ModelAdmin, перенаправив его на модель:

class MyAdmin(admin.ModelAdmin):
    list_display=['my_property',]

    def my_property(self, object):
        return object.my_property

    my_property.short_description = _("Property X")
person vdboor    schedule 26.11.2011

Я не знаю, как это сделать с помощью синтаксиса декоратора @, но вы можете:

def my_property(self):
    return u'Returns some calculations'
property_x = property(my_property)

Затем в вашем наборе классов администратора:

list_display = ['whatever', 'something_else', 'property_x']

Капитализация не идеальна, но будет отображаться «Свойство x». Можно заставить Django отображать __doc__ для свойства, чтобы вы могли лучше контролировать форматирование, но это только начало.

Вы можете добавить аргумент ключевого слова doc= как таковой:

property_x = property(my_property, doc='Property X')
person Brandon    schedule 30.08.2011
comment
doc=keyword было бы намного лучше. Мне нужно имя столбца, которое можно было бы локализовать. Например, _('Свойство X'). Вот почему я не хочу, чтобы Django просто использовал имя свойства с большой буквы. Как я могу использовать doc с декораторами? - person alekwisnia; 31.08.2011
comment
Хороший вопрос. У меня не было времени копаться в реализации Django того, как заполняются имена столбцов в списке изменений. - person Brandon; 31.08.2011
comment
Было бы неплохо, если бы они изменили поведение list_display, чтобы можно было настраивать имена столбцов, например: list_display = ['whatever':'First column name', 'something_else':'Second column','property_x':' Третий столбец',] - person alekwisnia; 01.09.2011
comment
Я согласен, и так как нам доступны все исходники, мы можем написать патч. - person Brandon; 01.09.2011

в admin.py в свой ModelAdmin добавьте этот код:

def my_property(self , obj):
    return 'Returns some calculations'
my_property.short_description = 'Property X'

после этого добавьте my_property в list_display

list_display=['my_property',]

вот так:

class MyAdmin(admin.ModelAdmin):
    list_display=['my_property',]

    def my_property(self , obj):
        return 'Returns some calculations'
    my_property.short_description = 'Property X'
person hassanzadeh.sd    schedule 16.04.2019

Вы можете переопределить класс свойства как класс нового стиля. Таким образом, вы можете добавить все необходимые атрибуты

class property(property):
    """Redefine property object"""
    pass

@property
def my_property(self):
     return u'Returns some calculations'

my_property.short_description = _("Property X")

На самом деле я не уверен, что это хорошая практика. Во всяком случае, я не вижу противопоказаний.

person ellethee    schedule 27.11.2013

Эта ветка старая, но на случай, если кто-то забредет сюда, работающее решение — просто добавить short_description к method/property в вашем классе.

def my_property(self):
    # Some things done
my_property.short_description = 'Property'

Это решит проблему.

person Indradhanush Gupta    schedule 18.03.2015
comment
Отлично работает с Django 2.1. - person Endre Both; 15.01.2019

person    schedule
comment
Лучшее решение. Легко и прямо - person Andrés Monge Moreno; 10.06.2015
comment
за исключением того, что вы получаете реквизит и метод, которые возвращают одно и то же - person igorsantos07; 13.11.2017