2012-01-21 11 views
1

対応するCompetitionEntryモデルを持つCompetitionモデルがあります。私は、各競技のエントリー数を管理者ビューに表示したいと思います。ここで管理リストビュー内の外部キーオブジェクトの数を表示

は、モデルの定義です:

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の中で関係が定義されているので、CompetitionクラスがCompetitionEntryクラスとどのように「話し合う」ことができないのですが、CompetitionEntry内のエントリを表示したいと思います。

答えて

1

ModelAdminのPython関数は、fieldsetsまたはlist_displayreadonly_fieldsの属性に追加することで参照できます。

外部キーが指す各クラス(デフォルトでは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

これはまさに私が必要としていたものです。ありがとうございました! –

関連する問題