gpt4 book ai didi

python - 解决预防重复投票时从索引到帖子的重定向失败

转载 作者:太空宇宙 更新时间:2023-11-03 16:27:40 25 4
gpt4 key购买 nike

我想保存每个帖子的用户的投票,以防止重复投票。这个想法是将点赞保存在“liked_eintraege”中。用户应该只能在结果页面上投票,而不能在索引页面上投票。因此我将其添加到结果 View 中。

目前,如果您对某个帖子进行投票,积分就会上升,但问题是,无论我在索引页上单击哪个帖子,它都会不断重定向到该(已投票的)帖子。然而,重复投票是不可能的,因为它转到 else 子句并且不显示投票三角形。因此,防止重复投票是有效的。

View .py

def result(request, id):
eintrag = get_object_or_404(Eintrag, pk=id)

...

eintraege = Eintrag.objects.all().order_by('-id')
if request.user.is_authenticated():
#here in the next line is the problem:
liked_eintraege = request.user.liked_eintraege.filter(id__in=[eintrag.id for eintrag in eintraege])
else:
liked_eintraege=[]

context = {
'eintrag': eintrag,
'comments': comments,
'comment_form':form,
'liked_eintraege': liked_eintraege
}

return render(request, 'gaestebuch/result.html', context)

@login_required
def vote(request):
eintrag = get_object_or_404(Eintrag, pk=request.POST.get('eintrag'))
eintrag.points += 1
eintrag.save()
user = request.user
user.liked_eintraege.add(eintrag)
user.save()
return HttpResponse()

模型.py:

class Eintrag(models.Model):
author = models.ForeignKey(settings.AUTH_USER_MODEL, default=1)
title = models.CharField(max_length=200)
points = models.IntegerField(default=1)
text = models.TextField()
created_date = models.DateTimeField(default=timezone.now)
voters = models.ManyToManyField(User, related_name='liked_eintraege')

在 result.html 中:

            {% if user.is_authenticated and eintrag not in liked_eintraege %}
<a href="/vote/" id="eintrag-vote-{{ eintrag.id }}" class="vote">▲</a>
<p id="eintrag-title-{{ eintrag.id }}">{{ eintrag.title }}</p>
{% else %}
<p>{{ eintrag.title }}</p>
{% endif %}

投票功能可以使用,这要归功于我之前发布的帖子。

最佳答案

这解决了我的问题!

liked_eintraege = request.user.liked_eintraege.all() 

而不是过滤它(filter(id__in=[eintrag.id for eintrag in eintraege])),因为模板已经这样做了!不管怎样,谢谢。

关于python - 解决预防重复投票时从索引到帖子的重定向失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37864419/

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