Есть у нас модель 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 модель Коллекция обрела новое поле - "Номинации":


Комментариев нет:
Отправить комментарий