Django模型,@ property特定装饰器

时间:2016-08-05 09:11:50

标签: python django django-models

假设我有这样的模型:

class Article(models.Model):
    ...

    def get_route(self):
        ...
        return data

当我想在管理面板中显示get_route()返回的值时,我必须创建这样的自定义方法:

def list_display_get_route(self, obj):
    return obj.get_route()
list_display = ('list_display_get_route', ...)

我最近发现,如果我使用get_route()装饰@property,则无需使用list_display_get_route(),以下内容将有效:

models.py

@property
def get_route(self):
    ...
    return data

admin.py

list_display = ('get_route', ...)

这是正确的做法吗?这个解决方案有什么缺点吗?

1 个答案:

答案 0 :(得分:4)

使用get_route中的list_display即使您没有将其作为财产,也应该有效。

class Article(models.Model):

    def get_route(self):
        ...
        return data

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('get_route', ...)

有关支持的值类型列表,请参阅list_display文档。第四个示例"表示模型"上的属性的字符串,相当于您的get_route方法。

如果您愿意,可以使用property装饰器,但在这种情况下,将其命名为route会更有意义。

@property
def route(self):
    ...
    return data

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('route', ...)