为了账号安全,请及时绑定邮箱和手机立即绑定

添加“if”语句,当点赞数达到一定值时发送电子邮件

添加“if”语句,当点赞数达到一定值时发送电子邮件

倚天杖 2023-11-09 22:22:17
我正在尝试添加 IF 语句,以便当点赞数达到 2 时发送电子邮件。我已经编写了代码,但它不起作用,我正在尝试以下代码,但它不起作用。我的问题是如何添加 if 语句,以便当任何具有 like more the 2 的项目时,都会向电子邮件发送特定的电子邮件。这是 models.pyclass Post(models.Model):    title = models.CharField(max_length=100, unique=True)    likes = models.ManyToManyField(        User, related_name='liked', blank=True)    def __str__(self):        return self.title    def total_likes(self):        return self.likes.count()这是views.pyclass PostDetailView(DetailView):    model = Post    template_name = "post_detail.html"    def get_context_data(self, *args, **kwargs):        context = super(PostDetailView, self).get_context_data()        post = get_object_or_404(Post, slug=self.kwargs['slug'])        comments = Comment.objects.filter(            post=post, reply=None).order_by('-id')        total_likes = post.total_likes()        liked = False        if post.likes.filter(id=self.request.user.id).exists():            liked = True        if self.request.method == 'POST':            comment_form = CommentForm(self.request.POST or None)            if comment_form.is_valid():                content = self.request.POST.get('content')                reply_id = self.request.POST.get('comment_id')                comment_qs = None                if reply_id:                    comment_qs = Comment.objects.get(id=reply_id)                comment = Comment.objects.create(                    post=post, user=self.request.user, content=content, reply=comment_qs)                comment.save()                return HttpResponseRedirect("post_detail.html")        else:            comment_form = CommentForm()        context["total_likes"] = total_likes        context["liked"] = liked        context["comments"] = comments        context["comment_form"] = comment_form        return context    def get(self, request, *args, **kwargs):        res = super().get(request, *args, **kwargs)        self.object.incrementViewCount()        return res
查看完整描述

1 回答

?
慕尼黑5688855

TA贡献1848条经验 获得超2个赞

如果您希望这种情况在任何地方发生,我建议向模型save()的方法添加一个覆盖Post,并在它增加到两个喜欢时向那里发送电子邮件。您还可以使用 Django 的send_mail函数,它是发送电子邮件的一个很好的包装器。胖模型、瘦视图、愚蠢模板是 Django 最佳实践的口头禅。也许是这样的:


from django.core.mail import send_mail


class Post(models.Model):

    title = models.CharField(max_length=100, unique=True)

    likes = models.ManyToManyField(

        User, related_name='liked', blank=True)


    def __str__(self):

        return self.title


    def save(self, *args, **kwargs): 

        if self.total_likes() == 2:

            send_mail(

                "my subject",

                "my text message",

                "myemail@myhost.com",

                ["myuser@theirhost.com"],

                html_message="<h1>My HTML Message</h1>",

            )

        super().save(*args, **kwargs) 


    def total_likes(self):

        return self.likes.count()

祝你好运!


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 69 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信