如何在不创建节点ModelField类的情况下覆盖单个字段的__str __()方法?

时间:2016-06-20 13:10:20

标签: django django-models django-1.9

我有以下Model类来表示我的资产,包括成本。

class Asset(models.Model):
    name = models.CharField(max_length=64)
    cost = models.DecimalField(max_digits=12, decimal_places=2, default=0.00)

    def __str__(self):
        return self.name

有没有办法覆盖__str__()的{​​{1}}方法?

我的目标是让Asset.cost的输出包括货币符号,同时保留整数的属性。

示例:

cost

2 个答案:

答案 0 :(得分:1)

显然不可能。 __str__是属于类Asset的方法,但是如果您要打印object.cost,则尝试显示字段 {{的字符串表示形式1}}。 cost只会影响模型__str__的对象的输出,但不会影响单个字段的输出。

其次,Asset没有将object.cost + 10添加到10,您只是打印了两个整数加法的结果,但是您没有将结果保存到变量也未分配给object.cost,因此object.cost无法执行任何操作。

你需要一个util函数才能做到这一点,我认为这是一件微不足道的事情。该功能应该在班级__str__中,除非您有其他情况可以打印货币。在哪些情况下,util应该是一个独立的函数。

答案 1 :(得分:1)

您可以定义一个方法display_cost,然后在需要前面的美元符号时调用该方法。

def display_cost(self):
    return "${amount}".format(amount=self.cost)


obj.cost = 10.00
obj.save()
obj.display_cost() # >> "$10.00"

这样,您仍然可以通过不更改Asset.cost字段来保留整数的属性,而是使用函数在需要时将其包装。