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

标签 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', ...)

我最近发现,如果我用 @property 装饰 get_route() 就不需要使用 list_display_get_route() 和下面的将工作:

模型.py

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

admin.py

list_display = ('get_route', ...)

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

最佳答案

list_display 中使用 get_route 应该可以工作,即使您不将其设为属性也是如此。

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', ...)

关于python - Django 模型,方法的@property 装饰器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38785514/

相关文章:

python - 如何在 tkinter ttk.button 中使用不同颜色为按钮着色?

python - NumPy 数组中的第一个和最后一个元素

python - 获取所有对象 ID 的列表

python - Django CharField 在不应该的时候接受空值

Python - 基于json输入构建函数

python - 二进制数组 : Determine if all 1s in one array come before first 1 in the other

Django Imagekit 背景填充

python - 在 Celery/Django : cannot find reference 'control' in celery. 任务.control

python - 带有产品的 Django 购物车模型 - 实现商品数量

python - 具有多个模型的外键