Python 添加“如果”语句,以便在喜欢次数达到某个“否”时发送电子邮件

Python 添加“如果”语句,以便在喜欢次数达到某个“否”时发送电子邮件,python,django,Python,Django,我试图添加一个IF语句,这样当Like计数达到2时,就会发送一封电子邮件。我已经写了代码,但它不工作,我尝试与以下,但它不工作 我的问题是如何添加一个if语句,以便在任何喜欢2以上的项目时,都会发送一封特定的电子邮件 这是模型 class Post(models.Model): title = models.CharField(max_length=100, unique=True) likes = models.ManyToManyField( User, re

我试图添加一个IF语句,这样当Like计数达到2时,就会发送一封电子邮件。我已经写了代码,但它不工作,我尝试与以下,但它不工作

我的问题是如何添加一个if语句,以便在任何喜欢2以上的项目时,都会发送一封特定的电子邮件

这是模型

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 total_likes(self):
        return self.likes.count()
这是views.py

class 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


def LikeView(request):
    # post = get_object_or_404(Post, id=request.POST.get('post_id'))
    post = get_object_or_404(Post, id=request.POST.get('id'))
    liked = False
    if post.likes.filter(id=request.user.id).exists():
        post.likes.remove(request.user)
        liked = False
    else:
        post.likes.add(request.user)
        liked = True

    context = {
        'total_likes': post.total_likes,
        'liked': liked,
        'post': post
    }

    if post.likes.count() == 2:
        msg = EmailMessage('Count Reached',
                           settings.EMAIL_HOST_USER, [request.user.email])
        msg.content_subtype = "html"  # Main content is now text/html
        msg.fail_silently = False
        msg.send()

    if request.is_ajax:
        html = render_to_string('like_section.html', context, request=request)
        return JsonResponse({'form': html})

如果您希望这种情况到处都发生,我建议您在
Post
模型的
save()
方法中添加一个覆盖,并在增加到两个相似项时发送电子邮件。您还可以使用Django的
send\u mail
功能,这是一个很好的发送电子邮件的包装器。胖模型、瘦视图、哑模板是Django最佳实践的口头禅。也许是这样的:

从django.core.mail导入发送邮件
班级职务(models.Model):
title=models.CharField(最大长度=100,唯一性=True)
likes=models.ManyToManyField(
用户,相关的(name='liked',blank=True)
定义(自我):
返回自己的标题
def保存(自身、*args、**kwargs):
如果self.total_likes()=2:
寄信(
“我的主题”,
“我的短信”,
"myemail@myhost.com",
["myuser@theirhost.com"],
html\u message=“我的html消息”,
)
super().save(*args,**kwargs)
def total_likes(自我):
return self.likes.count()

祝你好运

你尝试了什么?你在哪里fail@iklinac用测试更新的问题如果self.total_likes()而不是
如果self.likes
?是的,你是对的!但是,我建议在
Post
模型上创建一个
total_likes
models.IntegerField
,并在每次向
likes
添加相关行时递增一。从长远来看,这将大大降低查询成本,为每篇文章查找微不足道的空间量。我不会这么做。在M2M关系中添加或删除项目时,我们可能会忘记更新计数。无论哪种方式。请注意,一旦关系表中有很多行,就会看到显著的速度减慢。但这是可以解决的。干杯