我有一个这样的模型:
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
。我怎么能这样做?
答案 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'