send_email_after_answer не использует свой аргумент s, а вместо этого проходится вообще по всем ответам в БД и заново переотправляет их на почту. Нужно передавать ID ответа в сигнатуру таски и использовать его для отправки.
Модель данных некорректная. Сообщение должно становиться прочитанным для конкретного участника чата, а у вас - для всех сразу. И лучше трекать дату первого непрочитанного + количество в модели "участника" - тогда всё сильно проще.
Вроде бы всё правильно сделано. Однако, если у вас не runserver, то c IP-адресами может быть засада.
И хочу добавить, что в Django-Debug-Toolbar 3.2.1 пофиксили SQL INJECTION, так что стоит убирать его под флаг DEBUG на проде.
class-based views предоставляют стандартный функционал (don't repeat yourself). Если у вас и так нет дублирования кода и велосипедов, функции более чем подойдут.