Как получить электронную почту от 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
Вернуться на верх