2010-12-30 7 views
8

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

Он состоит из классов клиента, проекта, администратора и администратора, где 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)

ответ

28

Отображение содержимого ManyToMany поля по умолчанию не поддерживается Джанго, поскольку в базе данных будет запрашиваться для каждой строки результатов. Вы можете показать это сами по adding a method to your Project-model:

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 полях!

+0

Это отлично поработало. Любая идея, как я могу добавить фильтр для каждого администратора? – Thordin9

+0

понял это. Еще раз спасибо – Thordin9

+0

можно ли добавить verbose_name в возвращаемое значение? – Thordin9

Смежные вопросы