Показать количество объектов внешнего ключа в списке администратора - PullRequest
1 голос
/ 21 января 2012

У меня есть модель Competition, у которой есть соответствующая модель 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 немного ржавые, но они должны бытьдовольно простой способ добавить это к администратору, верно?Есть указатели?Я не могу понять, как класс Competition может «общаться» с классом CompetitionEntry, поскольку отношения определены внутри CompetitionEntry, но я хочу показать записи внутри Competition.

1 Ответ

1 голос
/ 21 января 2012

Вы можете ссылаться на функции python в ModelAdmin, добавляя его в атрибуты 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"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...