Python 解决重复投票时,从索引重定向到帖子失败

Python 解决重复投票时,从索引重定向到帖子失败,python,django,django-templates,django-views,Python,Django,Django Templates,Django Views,我想保存每个帖子用户的投票,以防止重复投票。这个想法是为了在“喜欢的人”中保存投票权。用户应该只能在结果页上投票,而不能在索引页上投票。因此,我将其添加到结果视图中 目前,如果你上传一篇文章,分数会上升,但问题是无论我在索引页上点击什么文章,它都会一直重定向到这篇(上传的)文章。但是,重复投票是不可能的,因为它转到else子句,并且不显示投票三角形。因此,防止重复投票是有效的 views.py def result(request, id): eintrag = get_object_o

我想保存每个帖子用户的投票,以防止重复投票。这个想法是为了在“喜欢的人”中保存投票权。用户应该只能在结果页上投票,而不能在索引页上投票。因此,我将其添加到结果视图中

目前,如果你上传一篇文章,分数会上升,但问题是无论我在索引页上点击什么文章,它都会一直重定向到这篇(上传的)文章。但是,重复投票是不可能的,因为它转到else子句,并且不显示投票三角形。因此,防止重复投票是有效的

views.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()
models.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 %}
{%如果user.is_身份验证且eintrag不在liked_eIntrage%}

{{eintrag.title}

{%else%} {{eintrag.title}

{%endif%}
投票功能可以工作,多亏了我之前的一篇文章。

这解决了我的问题

liked_eintraege = request.user.liked_eintraege.all() 

而不是对其进行过滤(filter(id\uu in=[eintrag.id for eintrag in eintrage]),因为模板已经完成了这项工作!无论如何,谢谢。

那么问题是什么?您是否尝试过Eintrag模型中的bolean字段,当用户进行第一次投票时,该字段会更新为true,这样他就不能再进行投票了?如果我错了,请纠正我,但您不能只做
。。。eintrag不在用户中。是否喜欢\u eintrage
?(或者是
user.liked\u eintrage\u set.all
)--我的观点是
user属性。liked\u eintrage
已经被
用户过滤了。不,我仍然面临同样的问题。一旦我对一篇文章进行了投票,我就一直从索引页重定向到它,不管我点击的是什么文章。嘿,我刚刚更新了我的问题,也许现在更清楚了。有什么建议吗?