检查当前用户是不是投票

Posted

技术标签:

【中文标题】检查当前用户是不是投票【英文标题】:Check if current user has voted检查当前用户是否投票 【发布时间】:2012-04-08 06:22:55 【问题描述】:

在我的索引页面上,我需要知道当前用户是否对一本书进行了投票,因此我可以在当前用户已投票的 <li> 元素上设置一个类。

模板(sn-p)

% if top_books %
<ul>
    % for book in top_books %
        <li id=" book.id " class="book">
                <img class="upvote % ifequal thisUserUpVote 1 %selected% endifequal %" title="Upvote book (click to undo)" src=" STATIC_URL images/upvote.png" />
                 book.score|floatformat 
                <img class="downvote % ifequal thisUserDownVote 1 %selected% endifequal %" title="Downvote book (click to undo)" src=" STATIC_URL images/downvote.png" />
            <a href="/p/ book.id /"> book.title </a>
        </li>
    % endfor %
</ul>

Views.py (sn-p)

from django.http import HttpResponse
from django.shortcuts import render_to_response, get_object_or_404
from django.template import RequestContext
from books.models import Book

def index(request):
    latest_book = Book.objects.all().order_by('-pub_date')[:5]
    top_items = Book.objects.all().order_by('-score')[:100]
    return render_to_response('books/index.html', 
                            'latest_books': latest_books,
                            'top_books' : top_books,
                            context_instance=RequestContext(request))

Models.py (sn-p)

class Book(models.Model):
    title = models.CharField(max_length=500)
    pub_date = models.DateField()
    author = models.ManyToManyField(Author)
    userUpVotes = models.ManyToManyField(User, blank=True)
    userDownVotes = models.ManyToManyField(User, blank=True)

【问题讨论】:

【参考方案1】:

首先,您的代码无法正确呈现,因为您将变量传递给视图中不存在的模板 - 我希望这只是一个错字。

def index(request):
    latest_book = Book.objects.all().order_by('-pub_date')[:5]
    top_items = Book.objects.all().order_by('-score')[:100]
    return render_to_response('books/index.html', 
                            'latest_books': latest_books, # latest_book
                            'top_books' : top_books, # top_items
                            context_instance=RequestContext(request))

对于您的问题 - 您需要在模板的循环中检查模型的用户是 userUpVotes 还是 userDownVotes

% for book in top_books %
   % if user in book.userupvotes.all %
        user  has upvoted
   % endif %
   % if user in book.userdownvotes.all %
        user  has downvoted
   % endif %
% endfor %

【讨论】:

以上是关于检查当前用户是不是投票的主要内容,如果未能解决你的问题,请参考以下文章

Django:如何检查用户是不是已经在 ManyToManyField 上投票?

ajax 在运行脚本之前检查用户是不是登录

NodeJs,处理用户投票的到期日期

Rails 3:阻止用户对自己的内容进行投票

django 过滤当前用户进行投票

如何选择评论数、投票总和以及活跃用户是不是投票