如何在管理界面中的Django中的整数字段中添加“$”?

时间:2013-09-26 04:45:05

标签: django django-models django-admin

我有一个这样的模型:

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。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

您应该使用DecimalField作为货币值而不是整数字段(否则您的预算不能达到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}

是什么意思

这是新的format string syntax

>>> 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'

:中的{0:format specification的开头,可以控制事物的显示方式:

>>> '{0:.2f}'.format(123.456)
'123.46'
>>> '{0:.3f}'.format(123.456)
'123.456'
>>> '{0:.3f}'.format(.456)
'0.456'