@xakslim

Как сгруппировать данные из другой модели django?

Доброго дня, мудрейшие! Есть модели Протокол, Заявитель, Тип помощи. Заявитель привязан привязан к конкретному протоколу и в свою очередь к конкретному типу помощи. Через 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
  • Вопрос задан
  • 90 просмотров
Пригласить эксперта
Ответы на вопрос 1
@sinitsinsv
Кратко: отсортировать список заявителей по типу помощи и в шаблоне использовать тег groupby
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы