Ура, получилось. Не знаю, как это выглядит красиво или нет, но в внутри класса Tariff нужно описать функцию:
def get_channels(self):
channels = list(str(p).split(':') for p in self.channels_list.all())
channel_list = []
for category, name in groupby(channels, lambda x: x[0]):
channels_list_by_group = ";".join([channel[1] for channel in name])
channels_list_by_category = (category + ":" + channels_list_by_group + ".")
print(channels_list_by_category)
channel_list.append(channels_list_by_category)
return ''.join(channel_list)
Таким образом, мы получим следующий channel_list (пример того, что тянется из моей БД обработанной данной функцией):
Эфирные каналы: Карусель; ОТР; ТВ Центр; РЕН ТВ; Спас; СТС; Домашний; ТВ 3; ПЯТНИЦА!; Звезда; Мир; ТНТ; Муз ТВ; Первый канал; Россия; Матч ТВ; НТВ; 5 канал; Россия К; Россия 24.
Развлекательные: 8 канал; 7TV.
Детские: Da Vinci.
Кино и сериалы: НТВ Хит.
Познавательные: Загородная жизнь.
Дальше остается только поработать над этим списком и форматировать как вздумается. Надеюсь кому-нибудь это поможет. Если кто-то предложит вариант получше, буду очень рад ознакомиться с предложением.