通过在每次投票中保存用户名,在Django休息框架中创建投票系统

时间:2017-03-10 08:49:50

标签: django django-rest-framework

我正在使用DRF,我想使用喜欢,不喜欢和中立建立我自己的投票系统。我有前端设置,所以当用户喜欢一个图像我想他的用户ID保存在帖子模型中,等等不喜欢。

class Posts(models.Model):
   user = models.ForeignKey(User, on_delete=models.CASCADE,related_name =      'user_posts')
   image = models.ImageField('optionalImage', upload_to='images/posts/', default='/images/posts/blank.png')
   likes = models.TextField(max_length=200, default=0)
   dislikes = models.TextField(max_length=200, default=0)
   neutral = models.TextField(max_length=200, default=0)

我有以下问题:

1)如何保存像[14,33,22 ...]这样的用户名列表,因为我不能使用文本字段。

2)通过将用户的用户ID保存在相应的选择范围内(喜欢,不喜欢)或者它们是否应该是分开的,在同一帖子中维护喜欢和不喜欢并更新它们是一个好的结构吗?进入一个不同的模型?

3)在使用此模型之前,检查用户是否看过特定帖子的最佳方法是什么?我是否必须检查喜欢,不喜欢和中立列表,看看用户是否对帖子采取了行动?或者我需要另一个唯一标识符?我需要这样做才能将新帖子返回给用户。

提前致谢!!

1 个答案:

答案 0 :(得分:2)

投票模型怎么样?

class Vote(models.Model):
    user = models.ForeignKey(User)
    post = models.ForeignKey(Post)
    upvote = models.BooleanField()

在我看来,你不应该直接在你的帖子模型中存储喜欢的东西。

修改

或者可能是这样的:

class Like(models.Model):
   user = models.ForeignKey(User)
   post = models.ForeignKey(Post)

class Dislike(models.Model):
   user = models.ForeignKey(User)
   post = models.ForeignKey(Post)

class Read(models.Model):
   user = models.ForeignKey(User)
   post = models.ForeignKey(Post)

或者这个:

class PostAction(models.Model):
   POST_ACTION_TYPES = ((LIKE, 'Like'), (DISLIKE, 'Dislike'), (READ, 'Read'))
   action_type = models.CharField(choices=POST_ACTION_TYPES) 
   user = models.ForeignKey(User)
   post = models.ForeignKey(Post)