Вопрос:
Я пытаюсь получить доступ к полям в admin, используя list_display. Согласно документам: (https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_display), ManyToManyFields не поддерживаются. Я обошел это, создав собственный метод:
#models.py class Gig musician = models.ManyToManyField(Musician) note = models.CharField(max_length=20) def __unicode__(self): return u’%s’ % (self.note) def gig_musicians(self): return self.musician.all() #admin.py class GigAdmin list_display = (‘note’, ‘gig_musicians’)
Это дает мне результат, который я ищу, но он очень уродлив (это тоже работает для родовых отношений). Результаты выглядят так:
[<Musician: Richard Bona>, <Musician: Bobby Mcerrin>]
Я думаю, это из-за того, как я построил метод. Есть ли у вас какие-либо советы относительно того, как сделать это более элегантным, т.е. просто имена?
Я пробовал другие решения, такие как django display content of manytomanyfield, но я не мог заставить его работать для меня (он просто отображается None)
Лучший ответ:
Ваши текущие gig_musicians возвращают QuerySet, а не строку.
Попробуйте эту функцию gig_musicians:
def gig_musicians(self): return ‘, ‘.join([obj.name for obj in self.musician.all()])