gpt4 book ai didi

jquery - 如何让用户在 Django 中只喜欢/不喜欢帖子一次?

转载 作者:行者123 更新时间:2023-12-01 01:21:21 25 4
gpt4 key购买 nike

几天前开始学习 Django,但现在我遇到了这个问题。这是一个博客网站,我目前正在使用喜欢/不喜欢功能。目前,经过身份验证的用户可以根据需要多次点赞同一帖子。估计是我的模型有问题。 (或者也许是我认为的条件)我将非常感谢您的帮助和澄清! :)

这是我的模型(Post.py):

class Post(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name="Пользователь", related_name='author')
title = models.CharField(max_length=80, verbose_name="Название")
body = models.TextField(verbose_name="Текст публикации")
created = models.DateTimeField(auto_now_add=True, verbose_name="Дата создания")
modified = models.DateTimeField(auto_now=True, verbose_name="Дата обновления")
description = models.CharField(max_length=400,verbose_name = "Описание")
reading_time = models.PositiveSmallIntegerField(verbose_name="Время для чтения в минутах")
likes = models.PositiveIntegerField(default=0)
dislikes = models.PositiveIntegerField(default=0)
users_reaction = models.ManyToManyField(User, blank=True, verbose_name='Реакция юзеров', related_name='react')

我的观点(Post.py):

class UserReactionView(View):
template_name='post.html'

def get(self, request, *args, **kwargs):
post_id = self.request.GET.get('post_id')
post = Post.objects.get(id = post_id)
like = self.request.GET.get('like')
dislike = self.request.GET.get('dislike')
post_user_reactions = Post.objects.filter(user=request.user)
if like and (request.user not in post_user_reactions.all()):
post.likes += 1
post.users_reaction.add(request.user)
post.save()
if dislike and (request.user not in post_user_reactions.all()):
post.dislikes += 1
post.users_reaction.add(request.user)
post.save()
data = {
'likes': post.likes,
'dislikes': post.dislikes
}

return JsonResponse(data)

模板中的jquery block

{% block jquery %}
<script>
$(document).ready(function(){
$('#like').on('click', function(e){
e.preventDefault()
var post_id = {{ post.pk }}
var like = 'like'

data = {
post_id: post_id,
like: like
}
$.ajax ({
type:"GET",
url:"{% url 'blog:user_reaction' post.pk%}",
dataType: 'json',
data: data,
success: function(data){
$('#liked').html(data.likes)
$('#disliked').html(data.dislikes)

}
})
})

})

$(document).ready(function(){
$('#dislike').on('click', function(e){
e.preventDefault()
var post_id = {{ post.pk }}
var dislike = 'dislike'

data = {
post_id: post_id,
dislike: dislike
}
$.ajax ({
type:"GET",
url:"{% url 'blog:user_reaction' post.pk %}",
dataType: 'json',
data: data,
success: function(data){
$('#liked').html(data.likes)
$('#disliked').html(data.dislikes)

}
})
})

})
</script>

{% endblock %}

最佳答案

您的查询错误:

post_user_reactions = Post.objects.filter(user=request.user)

此查询会过滤掉 request.user 创建的所有帖子。

像这样改变它:

post_obj = Post.objects.get(id = post_id)
# Now get all the users that reacted to this post.
post_user_reactions = post_obj.users_reaction.all()

if like and (request.user not in post_user_reactions):
...
if dislike and (request.user not in post_user_reactions):
...

关于jquery - 如何让用户在 Django 中只喜欢/不喜欢帖子一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55296608/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com