【问题标题】:Django model for voting system and follow feature用于投票系统和跟随功能的 Django 模型
【发布时间】:2019-06-07 17:09:34
【问题描述】:

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

关注功能 - 它应该显示有多少关注者以及他们是谁。我在这里使用了与中间模型 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

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

【问题讨论】:

    标签: python django django-models model vote


    【解决方案1】:

    目前在 Question 模型上没有任何东西可以区分 up_vote 和 down_vote,因此这将返回相同的查询。

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

    这里是文档 generic relations

    【讨论】:

    • 我正在尝试避免通用关系
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多