python - 投票系统和关注功能的 Django 模型

标签 python django django-models model vote

我致力于投票系统(投票赞成和投票反对)和功能 - 关注。 我希望它能做好,因为我没有人可以建议,我把帖子和代码放在这里。

关注功能 - 它应该显示有多少关注者以及他们是谁。我在这里使用了带有中间模型 Follower 的 m2m 关系。 我的问题 - 这是该主题的正确方法吗 - 在此处使用 m2m 和中间模型?

功能投票赞成和投票反对 - 它应该显示有多少票赞成和多少票反对以及谁投票反对和谁投票赞成。 我的问题是m2m和中间模型Voter之间的关系是否也可以?

以下功能的代码:

class Post(models.Model):
    owner = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='posts')
    title = models.CharField(max_length=255, unique=True)
    description = models.TextField(max_length=1024)
    followers = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Follower', blank=True)
    is_visible = models.BooleanField(default=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('posts:post_detail', kwargs={'pk': self.pk})

    def number_of_followers(self):
        return self.followers.count()


class Follower(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    post = models.ForeignKey(Post, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.user

投票赞成和投票反对功能的代码:

class Question(models.Model):
    author = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    title = models.CharField(max_length=200)
    vote_up = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Voter', blank=True)
    vote_down = models.ManyToManyField(settings.AUTH_USER_MODEL, through='Voter', blank=True)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.title

    def get_absolute_url(self):
        return reverse('qa:qa_detail', kwargs={'pk': self.id})

class Voter(models.Model):
    user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
    topic = models.ForeignKey(Topic, on_delete=models.CASCADE)
    created = models.DateTimeField(auto_now_add=True)
    updated = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.user

现在只能使用跟随功能,但我想确保我的方法没问题。请并感谢您的帮助。

最佳答案

目前,问题模型上的 up_vote 和 down_vote 没有任何区别,因此这将返回相同的查询。

作为旁注,如果您计划向其他模型添加类似的投票/关注功能,则可能值得考虑这是否是通用关系的良好用例。这将创建一个多态关系并且是 DRY。

这里是文档 generic relations

关于python - 投票系统和关注功能的 Django 模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54169209/

相关文章:

python - 搜索列表并打印结果

django - 访问 django 中的模型字段和属性

python - 在django的事务中,更新操作后查询结果不会改变

python - 使用 Flask 中的请求连接 Bluemix 上的 Cloudant 是否有任何已知的负面影响?

python - 在这个 tensorflow 代码中如何放置文件名?

python - curve_fit 和 scipy.odr 的比较 - 绝对西格玛

python - 如果在数据库中找不到查询集,如何退出 View 功能

python - Django 中 ManyToMany 关系的内联编辑

python - 更改 Django 的 ROOT_URLCONF

python - 查询集 : Compare a field with a substring of another field of the same model