【问题标题】:Add a counter to Django admin home向 Django 管理主页添加一个计数器
【发布时间】:2012-12-22 10:39:25
【问题描述】:

我想知道是否可以在 Django 管理应用主页添加计数器,

示例:

我可以为此在 models.py 或 admin.py 中创建一个@property 吗?

谢谢

【问题讨论】:

    标签: python django admin


    【解决方案1】:

    我认为你不能在 Meta 中做到这一点,因为它需要一个动态值。修改 Meta 也会在您使用模型的所有地方进行更改,而不仅仅是管理员。我认为最好的办法是使用类似 https://stackoverflow.com/a/6312798/1433029 的东西或使用 django 管理工具 https://bitbucket.org/izi/django-admin-tools/

    【讨论】:

    • 我想这应该可行,但我想知道是否有简单的方法。我无法在项目上安装管理工具。也许我会尝试破解管理模板并在 ajax 中加载计数器。
    【解决方案2】:

    尝试修改Model._meta.verbose_name

    在你的 admin.py 文件中:

    from app.models import CouponModel
    
    CouponModel._meta.verbose_name_plural = "Used Coupons ( %s ) " % CouponModel.objects.all().count()
    

    我测试了这个,它可以工作,不知道它有多聪明。

    【讨论】:

    • 不工作,它第一次运行,但此后不再更新。只有在应用重启时才会更新。
    【解决方案3】:

    您可以专门化字符串类型以添加​​所需的动态行为。

    这是一个完整的例子:

    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())
    

    【讨论】:

    • VerboseName 类在哪里?
    • 它显示 <function UsedCoupons.Meta.<lambda> at 0x000002A04F42EE18>.. 如果我在没有 lambda 函数的情况下使用它,就像直接将 verbose_name_plural 设置为 UsedCoupons.objects.all().count() 一样,我得到 UsedCoupons 未定义。有什么提示吗?
    猜你喜欢
    • 2023-03-10
    • 2019-01-16
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多