Django属性的简短描述

ale*_*nia 21 django django-models django-admin

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

@property
def my_property(self):
     return u'Returns some calculations'
Run Code Online (Sandbox Code Playgroud)

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

class MyAdmin(admin.ModelAdmin):
    list_display=['my_property',]
Run Code Online (Sandbox Code Playgroud)

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

bbr*_*rik 36

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

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


vdb*_*oor 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")
Run Code Online (Sandbox Code Playgroud)


小智 5

def _my_property(self):
    return u'Returns some calculations'  
_my_property.short_description =  'Property X'
my_property = property(_my_property)
Run Code Online (Sandbox Code Playgroud)

  • 除了你最终得到一个 prop 和一个返回相同值的方法 (2认同)

Bra*_*don 3

我不知道如何使用 @ 装饰器语法来做到这一点,但你可以这样做:

def my_property(self):
    return u'Returns some calculations'
property_x = property(my_property)
Run Code Online (Sandbox Code Playgroud)

然后,在您的管理类集中:

list_display = ['whatever', 'something_else', 'property_x']
Run Code Online (Sandbox Code Playgroud)

大写并不完美,但它会显示“Property x”。也许可以让 Django 显示__doc__属性,以便您可以更好地控制格式,但这只是一个开始。

您可以添加 doc= 关键字参数,如下所示:

property_x = property(my_property, doc='Property X')
Run Code Online (Sandbox Code Playgroud)