如何在Django Admin中调用模型方法或属性?

3
有没有一种自然的方式在Django管理网站上显示模型方法或属性? 在我的情况下,我有一个角色的基本统计数据是模型的一部分,但其他影响该统计指标总计算的状态效果等因素:
class Character(models.Model):
    base_dexterity = models.IntegerField(default=0)

    @property
    def dexterity(stat_name):
          total = self.base_dexterity
          total += sum(s.dexterity for s in self.status.all()])
          return total

如果我可以在更改角色管理页面中的基础统计字段旁边显示计算出的总统计信息,那将非常好,但我不清楚如何将该信息合并到页面中。

1个回答

5

这是来自 文档 的一个好例子:

class Person(models.Model):
    first_name = models.CharField(max_length=50)
    last_name = models.CharField(max_length=50)
    color_code = models.CharField(max_length=6)

    def colored_name(self):
        return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name)
    colored_name.allow_tags = True

class PersonAdmin(admin.ModelAdmin):
    list_display = ('first_name', 'last_name', 'colored_name')

如果您想在编辑页面上获取自定义数据,那么只对列表页面进行更改是不够的,您需要覆盖模板


现在这种方法最好在Admin类中定义,而不是在模型本身中定义。只需记住它需要一个额外的参数obj,该参数是模型实例。 - Daniel Roseman
@DanielRoseman 这个方法在Admin类中会是这样的吗? def colored_name(self, obj): return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name) colored_name.allow_tags = True这个方法调用方式是否和Dmitry的例子一样?即 'list_display = ('colored_name')' - nu everest
1
@DanielRoseman 这个能用在“字段集”中吗?我在使用“字段集”时遇到了麻烦。 - nu everest
但是在字段集中如何调用这样的模型函数呢?我想在详细页面中使用它,你有什么想法吗? - R Claven

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接