Как получить электронную почту от usercusomer для подписчиков
Я хочу отправлять email каждому последователю после создания элемента. Но я не знаю, как получить это поле из Models, а также не знаю, как отправить каждому последователю письмо, чтобы связать его со следующим.
models.py
class Book(models.Models):
title = models.CharField(max_length=255)
author = models.ForeignKey(
"users.CustomUser", on_delete=models.SET_NULL, null=True
)
# This is my try
#But it doesn't work
@hook(AFTER_CREATE)
def send_followers(self):
user = Followers.objects.all()
followers_email = CustomUser.objects.filter(
followers__follower__in=, followers__following=self.author.profile)
if CustomUser.objects.filter(
followers__follower__in=CustomUser.objects.only(
'followers__follower'),
followers__following=self.author.profile
).exists():
send_mail(
"Article published",
'%s' % (
followers_email
),
"nikitaalexnazarov@yandex.ru",
[self.author.email],
fail_silently=False,
)
else:
pass
class CustomUser(AbstractUser):
gender = models.ForeignKey(
"Gender", on_delete=models.CASCADE, blank=True, null=True
)
class Followers(models.Model):
follower = models.ForeignKey(
"users.CustomUser", on_delete=models.CASCADE, null=True, blank=True)
following = models.ForeignKey(
"Profile", on_delete=models.CASCADE, null=True, blank=True)
class Profile(models.Model):
slug = models.SlugField(unique=True)
user = models.OneToOneField(get_user_model(), on_delete=models.CASCADE)
Ваше требование может быть выполнено с помощью сигналов. В Django сигналы используются для выполнения определенных действий на основе некоторых событий. В вашем случае вы хотите отправлять электронные письма всем последователям автора всякий раз, когда создается новая книга. Код, который отправляет письма, может быть реализован в приемниках. Сигнал post_save будет срабатывать всякий раз, когда в модели Book будет создана новая строка. Соответствующий сигнал будет получен приемником 'send_mail' и будет выполнен.
signals.py
from django.dispatch import receiver
@reciever(post_save, sender="Book")
def send_mail(sender, instance, **kwargs):
# get the user model row of the author. Since author field is in M2One relationship with CustomUser, we can access the id of the user.
user_obj = instance.author
# ProFile model is in One2One relationship with CustomUser. Get the profile instance/row corresponding to the user_obj.
profile_obj = user_obj.profile
followers_list = Followers.objects.filter(following=profile_obj)
#followers_list will be having a list of all the followers to whom mail can be sent. You can retrieve the email of the followers present in followers_list.
apps.py
from django.apps import AppConfig
class AppNameConfig(AppConfig):
name = 'AppName'
def ready(self):
import signals over here