2012-01-21 45 views
1

我有一個競爭模型,它有相應的CompetitionEntry模型。我想在管理員視圖中顯示每場比賽的參賽人數。顯示管理列表視圖中外鍵對象的數量

這裏的模型定義:

class Competition(models.Model): 

    def __unicode__(self): 
     return self.competition_name 

    competition_name = models.CharField(max_length=100) 
    competition_text = models.TextField() 
    active = models.BooleanField('Is this competition active?', blank=True) 
    date_posted = models.DateTimeField(auto_now_add=True) 

class CompetitionEntry(models.Model): 

    def __unicode__(self): 
     return self.competition.competition_name 

    competition = models.ForeignKey(Competition) 
    user = models.ForeignKey(User) 
    date_entered = models.DateTimeField(auto_now_add=True) 
    is_winner = models.BooleanField('Is this entry the winner?', blank=True) 

我的Django的技能是有些生疏,但應該有一個相當簡單的方式把它添加到管理員,對不對?任何指針?由於關係是在CompetitionEntry中定義的,我無法弄清楚競爭類如何與競爭類進行「交談」,但我想在競賽中顯示參賽作品。

回答

1

您可以通過將模型管理器中的python函數添加到fieldsetslist_displayreadonly_fields屬性中來引用python函數。

您可以通過反向相關管理器動態地添加到每個類的「反向」關係,外部關鍵點指向哪個類,默認情況下爲lowercasemodelname_set,行爲與您的默認objects管理器完全相同。

class MyAdmin(admin.ModelAdmin): 
    list_display = ('_competition_count',) 
    readonly_fields = ('_competition_count',) 

    fieldsets = (
     (None, {'fields': (
      '_competition_count', 
     )}) 
    ) 

    def _competition_count(self, obj): 
     return obj.competitionentry_set.count() 
    _competition_count.short_description = "Competition Count" 
+0

太棒了,這正是我所需要的。謝謝! –

相關問題