Django模型,方法的@property装饰器

Mic*_*ner 4 python django django-models

假设我有这样的模型:

class Article(models.Model):
    ...

    def get_route(self):
        ...
        return data
Run Code Online (Sandbox Code Playgroud)

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

def list_display_get_route(self, obj):
    return obj.get_route()
list_display = ('list_display_get_route', ...)
Run Code Online (Sandbox Code Playgroud)

我最近发现,如果我使用来装饰get_route()@property则无需使用,list_display_get_route()并且可以使用以下内容:

models.py

@property
def get_route(self):
    ...
    return data
Run Code Online (Sandbox Code Playgroud)

管理员

list_display = ('get_route', ...)
Run Code Online (Sandbox Code Playgroud)

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

Ala*_*air 5

即使不将get_routein list_display用作属性,也可以使用in 。

class Article(models.Model):

    def get_route(self):
        ...
        return data

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('get_route', ...)
Run Code Online (Sandbox Code Playgroud)

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

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

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

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('route', ...)
Run Code Online (Sandbox Code Playgroud)