如何在Django中建立投票系统

时间:2017-09-20 07:49:53

标签: python html django

所以我正在制作一个网站。 我发了帖子和用户模型。 我希望每个用户都为每个帖子投票。(向上或向下)

我想我需要一个新模型。我怎么做一个? 它应该为每个用户和帖子保存投票。 我想要一个post.ranking,这是所有上下的总和。

发布

model.py

class Post(models.Model):
...
ranking = models.IntegerField(default = 0)   

用户

model.py

class UserZ(authmodels.User, authmodels.PermissionsMixin):
    status = models.CharField(max_length=100, blank=True)
    avatar = models.ImageField(upload_to='images/avatar', null=True, blank=True, default='/static/img/Weramemesicon.png')

    def __str__(self):
        return self.username

1 个答案:

答案 0 :(得分:3)

我建议你不要重新发明轮子。您可以使用django-vote app

通过点击

安装django-vote

pip install django-vote

'vote'添加到您的INSTALLED_APPS设置

INSTALLED_APPS = (
  ...
  'vote',
)

VoteModel添加到您要投票的模型

from vote.models import VoteModel

class ArticleReview(VoteModel, models.Model):
    ...

运行迁移

manage.py makemigrations
manage.py migrate

使用投票API

review = ArticleReview.objects.get(pk=1)

# Up vote to the object
review.votes.up(user_id)

# Down vote to the object
review.votes.down(user_id)

# Removes a vote from the object
review.votes.delete(user_id)

# Check if the user already voted the object
review.votes.exists(user_id)

# Returns the number of votes for the object
review.votes.count()

# Returns a list of users who voted and their voting date
review.votes.user_ids()


# Returns all instances voted by user
Review.votes.all(user_id)