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