Фильтр и получение всех клиентов, которые принесли авторам другой контент, для отправки уведомления о добавлении нового контента
Я хочу фильтровать и получать всех клиентов, которые принесли авторам другой контент для отправки уведомления, когда новый контент добавлен Это работает на queryset я знаю, но я в замешательстве, как это сделать. Если кто-нибудь поделится, пожалуйста.
Вот мои модели
контент:
class Content(models.Model):
title = models.CharField(max_length=1000)
Author = models.ForeignKey('User',on_delete=models.CASCADE)
slug = AutoSlugField(populate_from='title', unique=True, null=False)
cover = models.ImageField(upload_to='course', default='nocover.jpg')
catogary = models.ForeignKey(Category, on_delete=models.RESTRICT)
description = models.TextField(max_length=2000, null=True, blank=True)
requirements = models.TextField()
price = models.FloatField()
language = models.ForeignKey(Language, on_delete=models.RESTRICT)
Покупаемый контент
class PurchasedContent(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
course = models.ManyToManyField(Course, blank=True, related_name='course')
Мне нужен весь список email клиентов, которые приобрели курс определенного автора. Автор будет аутентифицирован при добавлении. Мы получим Автора как request.user
Вот пример ListCreateAPIView в django rest Framework
class createlistcourseview(generics.ListCreateAPIView):
permission_classes = [TokenHasReadWriteScope]
queryset = Content.objects.all()
serializer_class = ContentSerializer
def perform_create(self, serializer):
#Here I want to create a Function that sends mall
serializer.save(author=self.request.user)
Итак, что вы можете сделать, это использовать сигнал для отправки электронной почты пользователям всякий раз, когда создается контент, например, так:
from django.dispatch import receiver
# models.py
@receiver(models.signals.post_save, sender=Content)
def send_email(sender, instance:Content, created, **kwargs):
if created:
# import and use your email helper here
# since the related name you chose for the purchased_content course is a little confusing I changed it to `purchased_content`
purchases = instance.course.purchased_content.all()
send_email(users=[user.email for user in purchases])
return