1

我有一个这样的模型:

class Category(models.Model):
    '''
        Category for tasks
    '''
    name = models.CharField(max_length=128)
    budget = models.IntegerField(help_text="Amount in US dollar ($)")

    class Meta:
        verbose_name_plural = "Categories"

    def __unicode__(self):
        return self.name

数据录入就好了。但是当我像这样在管理界面中显示属性预算时:

class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'budget')

而不是显示100我想显示$100。我怎样才能做到这一点?

4

1 回答 1

2

您应该使用 aDecimalField表示货币值而不是整数字段(否则您不能有预算,例如 150.40)

class Category(models.Model):
    name = models.CharField(max_length=128)
    budget = models.DecimalField(default=0.0, decimal_places=2, max_digits=5)

    class Meta:
        verbose_number_plural = 'Categories'

    def __unicode__(self):
        return unicode(self.name)  # always return unicode from __unicode__

    # This method will be used in the admin display
    def budget_display(self):
        # Normally, you would return this:
        # return '${0:1.2f}'.format(self.budget)
        # but a decimal field will display itself correctly
        # so we can just do this:
        return '${0}'.format(self.budget)
    budget_display.short_description = 'Budget'

您可以在 中使用任何可调用对象list_display,因此我们不显示该字段,而是调用该函数以返回我们想要的正确格式。

class CategoryAdmin(admin.ModelAdmin):
    list_display = ('name', 'budget_display')

你能解释一下 ${0: 1.2f} 是什么意思吗

这是新的格式字符串语法

>>> i = 123.45678
>>> '{0}'.format(i)
'123.45678'
>>> '{0:1.2f}'.format(i)
'123.46'

{}是您将传递给格式的任何内容的占位符。我0在那里放了一个表示我希望第一个参数去那里:

>>> '{0} {1}'.format('a', 'b')
'a b'
>>> '{1} {0}'.format('a', 'b')
'b a'

:in{0:格式规范的开始,它允许控制事物的显示方式:

>>> '{0:.2f}'.format(123.456)
'123.46'
>>> '{0:.3f}'.format(123.456)
'123.456'
>>> '{0:.3f}'.format(.456)
'0.456'
于 2013-09-26T04:57:30.817 回答