2010-05-19 67 views
3

在Django管理站點中是否有自然的方式顯示模型方法或屬性?在我來說,我有一個字符是模型的一部分基礎的統計數據,但其他的東西,如狀況的影響,其影響該統計總的計算:如何從Django Admin中調用模型方法或屬性?

class Character(models.Model): 
    base_dexterity = models.IntegerField(default=0) 

    @property 
    def dexterity(stat_name): 
      total = self.base_dexterity 
      total += sum(s.dexterity for s in self.status.all()]) 
      return total 

這將是很好,如果我可以顯示總在該字段旁邊計算統計信息以更改Change Character管理頁面中的基本統計信息,但我不清楚如何將該信息合併到頁面中。從docs

回答

4

很好的例子:

class Person(models.Model): 
    first_name = models.CharField(max_length=50) 
    last_name = models.CharField(max_length=50) 
    color_code = models.CharField(max_length=6) 

    def colored_name(self): 
     return '<span style="color: #%s;">%s %s</span>' % (self.color_code, self.first_name, self.last_name) 
    colored_name.allow_tags = True 

class PersonAdmin(admin.ModelAdmin): 
    list_display = ('first_name', 'last_name', 'colored_name') 

,對於列表頁面,如果你想編輯頁面上的自定義數據的工作,你需要override template

+0

現在這些方法最好在Admin類中定義,而不是模型本身。只要記住它然後需要一個額外的參數,'obj',這是模型實例。 – 2010-05-20 06:45:38

+0

@DanielRoseman在Admin類中這個方法看起來像這樣嗎? 'def colored_name(self,obj): return'%s%s'%(self.color_code,self.first_name,self.last_name) colored_name.allow_tags = True' 這個方法仍然和Dmitry的例子一樣嗎?即'list_display =('colored_name')' – 2013-02-08 13:46:22

+1

@DanielRoseman這可以與'fieldsets'一起使用嗎?我在'fieldsets'中使用這個問題時遇到了麻煩。 – 2013-02-08 15:37:20

相關問題