Django管理short_description可调用

时间:2013-11-10 04:19:20

标签: django django-admin

有没有办法在ModelAdmin中将字段的short_description定义为可调用 - 有时候想要在列名中提供额外的动态信息。

或者是否有任何丑陋的黑客可以实现相同的目标?

2 个答案:

答案 0 :(得分:2)

据我所知/记住属性只能在类定义中的新式类上定义。因此,您的ModelAdmin字段必须解析为具有所需属性的可调用对象。这个片段在我看来应该允许:

https://djangosnippets.org/snippets/2447/

字段本身成为一个属性,解析为VotesToday类的实例,short_description也是一个属性。

答案 1 :(得分:1)

Peter DeGlopper的回答提供了所需的方向 - 尽管自从djangosnippet发布以来已经发生了很多变化。

这确实有效:

class MyAdmin(admin.ModelAdmin):
    list_display = ('my_callable')

    class MyCallable:
        def __call__(self, obj):
            return 42

        @property
        def __name__(self):
            return 'Galaxy'

    @property
    def my_callable(self):
        if not hasattr(self, __my_callable):
            self.__my_callable = self.MyCallable()
        return self__my_callable

重要的是,MyAdmin对象未传递给MyCallable.__call__()来电 - 如果您需要访问它,请自行将其传递给__init__初始化程序。