Доброго дня, мудрейшие! Есть модели Протокол, Заявитель, Тип помощи. Заявитель привязан привязан к конкретному протоколу и в свою очередь к конкретному типу помощи. Через slug получаем страницу конкретного протокола, и заявителей относящихся с этому протоколу. Необходимо вывести список заявителей сгруппированных по типу помощи. На выходе должно быть вот так:
1. Материальная:
-заявитель;
-заявитель;
2. Похлопать по плечу :
-заявитель;
-заявитель;
models.py
class Protocol(BaseModel):
"""Протокол"""
title = models.CharField(
_('Название'), max_length=255, db_index=True, blank=True,
help_text=_('Обязательное поле')
)
slug = models.SlugField(
_('Алиас'), max_length=150, db_index=True, unique=True,
help_text=_('Латинские буквы и цифры')
)
date = models.DateTimeField(_('Дата протокола'), default=utcnow)
class Meta:
verbose_name = _('Протокол')
verbose_name_plural = _('Протоколы')
def __str__(self):
return self.title
class HelpType(BaseModel):
"""Тип помощи"""
title = models.CharField(
_('Название'), max_length=255, db_index=True, blank=True,
help_text=_('Обязательное поле')
)
class Meta:
verbose_name = _('Тип помощи')
verbose_name_plural = _('Типы помощи')
def __str__(self):
return self.title
class Applicant(BaseModel):
"""Заявитель"""
name = models.CharField('ФИО', max_length=255, help_text=_('Обязательное поле'))
position = models.CharField('Должность', max_length=255, null=True, blank=True)
cause = models.CharField('Причина', max_length=255, null=True, blank=True)
in_fond = models.CharField('Время пребывания в фонде', max_length=255, null=True, blank=True)
summ = models.IntegerField('Сумма ходатайства', null=True, blank=True)
summ_text = models.CharField('Сумма ходатайства прописью', max_length=255, null=True, blank=True)
protocol = models.ForeignKey(
'Protocol', verbose_name=(_('Протокол')), related_name='applicants', on_delete=models.CASCADE,
blank=True, null=True
)
help_type = models.ForeignKey(
'HelpType', verbose_name=(_('Тип помощи')), related_name='applicants', on_delete=models.CASCADE,
blank=True, null=True
)
class Meta:
verbose_name = 'Заявитель'
verbose_name_plural = 'Заявители'
ordering = ('ordering',)
def __str__(self):
return self.name
views.py:
class ProtocolView(BaseTemplateView):
"""Страница протокола"""
template_name = 'protocols/protocol.html'
def get_context_data(self, **kwargs):
kwargs = super(ProtocolView, self).get_context_data(**kwargs)
current_page = get_object_or_404(
models.Protocol.objects.published(), slug__exact=kwargs.get('slug')
)
applicants = models.Applicant.objects.published().filter(protocol=current_page.pk)
kwargs.update(
current_page=current_page,
applicants=applicants,
)
return kwargs