2013-09-26 35 views
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的。我怎樣才能做到這一點?

回答

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

謝謝我的男人。最好的答案! +1 – pynovice

+0

您能解釋一下'$ {0:1.2f}是什麼意思' – pynovice

+0

還有'max_digits'計數小數點後的數字嗎? – pynovice