Python 添加“如果”语句,以便在喜欢次数达到某个“否”时发送电子邮件
我试图添加一个IF语句,这样当Like计数达到2时,就会发送一封电子邮件。我已经写了代码,但它不工作,我尝试与以下,但它不工作 我的问题是如何添加一个if语句,以便在任何喜欢2以上的项目时,都会发送一封特定的电子邮件 这是模型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
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关系中添加或删除项目时,我们可能会忘记更新计数。无论哪种方式。请注意,一旦关系表中有很多行,就会看到显著的速度减慢。但这是可以解决的。干杯