我有一个竞赛模型,它有一个相应的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技能有点生疏,但应该有一个相当简单的方法将其添加到管理员,对吧?有什么指针吗?我无法弄清楚竞赛课如何与“竞赛”课程“谈话”,因为竞赛是在竞赛内部定义的,但我想在竞赛中展示参赛作品。
答案 0 :(得分:1)
您可以在ModelAdmin中引用python函数,方法是将其添加到fieldsets
或list_display
和readonly_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"