有没有人知道如何在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,但这都不起作用。
答案 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)
添加到 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'
这将解决问题。