Files
blechreiz-website/simpleforum/models.py

55 lines
1.7 KiB
Python

from django.contrib.auth.models import User
from django.core.mail import EmailMultiAlternatives
from django.db import models
from django.db.models.signals import post_save
from django.dispatch import receiver
from django.template.loader import render_to_string
from django.utils.translation import gettext_lazy as _
from musicians.models import Musician
class Message(models.Model):
titel = models.CharField(max_length=100, verbose_name=_("titel"))
text = models.TextField(blank=False, verbose_name=_("text"))
creation_time = models.DateTimeField(verbose_name=_("creation_time"))
author = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("Author"))
class Meta:
ordering = ["-creation_time"]
def __str__(self):
return self.author.username + " : " + self.titel
@receiver(post_save, sender=Message)
def send_forum_notification(sender, instance, created, **kwargs):
"""Send email notification when a new message is created."""
if not created:
return
receivers = [m.user.email for m in Musician.objects.all() if m.user.email]
if not receivers:
return
subject = "Blechreiz Forum: " + instance.titel
from_email = "forum@blechreiz.com"
context = {"messages": Message.objects.all().order_by("-creation_time")[:10]}
text_content = render_to_string("simpleforum/mail.txt", context)
msg = EmailMultiAlternatives(subject, text_content, from_email, receivers)
# Uncomment to add HTML version:
# html_content = render_to_string("simpleforum/mail.html", context)
# msg.attach_alternative(html_content, "text/html")
try:
msg.send()
except Exception:
# Log the error but don't crash
pass