django отображает содержимое множества полей - PullRequest
8 голосов
/ 30 декабря 2010

Я начал использовать фреймворк django всего несколько дней назад, и мне очень нужна помощь с моим приложением.

Он состоит из классов платежей клиента, проекта, администратора и администратора, где admin_payment содержит идентификаторыАдминистраторы и проекты среди прочего.

Мой вопрос: как я могу отобразить «имя администратора» каждого «проекта» в моем списке проектов администратора?сам класс проекта не содержит идентификаторы администратора (Admin_Payment)

В настоящее время у меня есть следующая структура: (в полосе)

models.py

class Admin(models.Model):
    admin_name = models.CharField(unique = True, blank = False, null = False, max_length = 128, verbose_name = u'admin full name')

    def __unicode__(self):
        return self.admin_name
    class Meta:
        ordering = ('id',)
        verbose_name = u'Admin Info'

class Project(models.Model):
    client = models.ForeignKey(Client, verbose_name = u'Client')
    description = models.ForeignKey(Description, verbose_name = u'project description')
    admins = models.ManyToManyField(Admin, verbose_name = u'Administrators', through = 'Admin_Payment')

class Admin_Payment(models.Model):
    admin = models.ForeignKey(Admin, verbose_name = u'Administrator')
    project = models.ForeignKey(Project, verbose_name = u'project')

admin.py (в полоску)

class AdminInline(admin.TabularInline):
    model = Admin

class ProjectAdmin(admin.ModelAdmin):
    radio_fields = {'position': admin.HORIZONTAL, 'solution': admin.HORIZONTAL}
    inlines = [AdminInline, ]
    list_display = ['client','description','admin_name']

Клиенты и описания правильно отображаются в списке проектов, но имена администраторов не

Любая помощь приветствуется (извините, если я написал что-то, что не делаетсмысл, я новичок в Python и Django)

1 Ответ

28 голосов
/ 30 декабря 2010

Отображение содержимого поля ManyToMany не поддерживается по умолчанию django, потому что база данных будет запрашиваться для каждой строки результатов.Вы можете отобразить его самостоятельно, добавив метод к Project -модели :

class Project(models.Model):
    ....
    def admin_names(self):
        return ', '.join([a.admin_name for a in self.admins.all()])
    admin_names.short_description = "Admin Names"

и поместив admin_names в свои поля list_display!

...