Django属性的简短描述

时间:2011-08-30 09:14:23

标签: django django-models django-admin

有没有人知道如何在Django模型中为属性添加自定义名称?例如,如果我有财产:

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

我在admin中将其显示为一列:

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

然后我看到“我的属性”列,我需要的是“属性X”列。我尝试使用my_property.short_description和my_property.verbose_name,但这都不起作用。

7 个答案:

答案 0 :(得分:32)

Masatsugu Hosoi的解决方案工作正常,但您也可以使用装饰器并在属性getter(fget)上设置short_description:

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

答案 1 :(得分:12)

我最后也将字段添加到ModelAdmin类,重定向到模型:

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

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

    my_property.short_description = _("Property X")

答案 2 :(得分:4)

def _my_property(self):
    return u'Returns some calculations'  
_my_property.short_description =  'Property X'
my_property = property(_my_property)

答案 3 :(得分:3)

我不知道如何使用@ decorator语法执行此操作,但您可以这样做:

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 = keyword参数:

property_x = property(my_property, doc='Property X')

答案 4 :(得分:0)

您可以将属性类重新定义为New-style类。 因此,您可以添加所需的所有属性

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

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

my_property.short_description = _("Property X")

其实我不确定这是一个好习惯。无论如何,我没有看到任何禁忌症。

答案 5 :(得分:0)

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'

答案 6 :(得分:-1)

这个帖子已经过时了,但如果有人在这里徘徊,那么有效的解决方案就是在你班级的short_description上添加method/property

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

这将解决问题。