Есть у нас модель Collection. Коллекция может быть задействована в нескольких номинациях, поэтому связь здесь ManyToMany.
В админке эта модель будет отображаться так:
Чтобы колонка появилась, нужно проделать пару шагов...
1. В файл admin.py добавим кастомный метод get_nominations, формирующий из названий номинаций строку, которую нужно будет отображать в колонке "Номинации":
2. К классу Collection добавим метод get_nominations():
Благодаря этому в админке Django модель Коллекция обрела новое поле - "Номинации":
В админке эта модель будет отображаться так:
Чтобы колонка появилась, нужно проделать пару шагов...
1. В файл admin.py добавим кастомный метод get_nominations, формирующий из названий номинаций строку, которую нужно будет отображать в колонке "Номинации":
class CollectionAdmin(admin.ModelAdmin): # .. иные настройки # А вот здесь мы пишем не название поля, а функцию list_display = ('title', 'get_nominations', )
2. К классу Collection добавим метод get_nominations():
class Collection(models.Model): """ Коллекция, принимающая участие в конкурсе """ title = models.CharField(max_length=100, verbose_name=u'Название') author = models.ManyToManyField(Author, verbose_name=u"Автор") nomination = models.ManyToManyField(Nomination, verbose_name=u'Номинация') contest = models.ManyToManyField(Contest, verbose_name=u'Конкурс(ы)') description = models.TextField(verbose_name=u'Описание коллекции') def __unicode__(self): return self.title def get_nominations(self): nomination_list = self.nomination.get_query_set() nominations_str = '' for nomination in nomination_list: nominations_str += ', ' + nomination.title return nominations_str.lstrip(', ') # В админке поле будет называться не get_nomination, а Номинации get_nominations.short_description = 'Номинации' class Meta: verbose_name = 'Коллекция' verbose_name_plural = 'Коллекции'
Благодаря этому в админке Django модель Коллекция обрела новое поле - "Номинации":
Комментариев нет:
Отправить комментарий