【发布时间】:2012-12-22 10:39:25
【问题描述】:
我想知道是否可以在 Django 管理应用主页添加计数器,
示例:
我可以为此在 models.py 或 admin.py 中创建一个@property 吗?
谢谢
【问题讨论】:
我想知道是否可以在 Django 管理应用主页添加计数器,
示例:
我可以为此在 models.py 或 admin.py 中创建一个@property 吗?
谢谢
【问题讨论】:
我认为你不能在 Meta 中做到这一点,因为它需要一个动态值。修改 Meta 也会在您使用模型的所有地方进行更改,而不仅仅是管理员。我认为最好的办法是使用类似 https://stackoverflow.com/a/6312798/1433029 的东西或使用 django 管理工具 https://bitbucket.org/izi/django-admin-tools/
【讨论】:
尝试修改Model._meta.verbose_name
在你的 admin.py 文件中:
from app.models import CouponModel
CouponModel._meta.verbose_name_plural = "Used Coupons ( %s ) " % CouponModel.objects.all().count()
我测试了这个,它可以工作,不知道它有多聪明。
【讨论】:
您可以专门化字符串类型以添加所需的动态行为。
这是一个完整的例子:
from django.db import models
class VerboseName(str):
def __init__(self, func):
self.func = func
def decode(self, encoding, erros):
return self.func().decode(encoding, erros)
class UsedCoupons(models.Model):
name = models.CharField(max_length=10)
class Meta:
verbose_name_plural = VerboseName(lambda: u"Used Coupons (%d)" % UsedCoupons.objects.all().count())
【讨论】:
<function UsedCoupons.Meta.<lambda> at 0x000002A04F42EE18>.. 如果我在没有 lambda 函数的情况下使用它,就像直接将 verbose_name_plural 设置为 UsedCoupons.objects.all().count() 一样,我得到 UsedCoupons 未定义。有什么提示吗?