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

我负责投票系统(投票和否决)以及功能-遵循。
我希望它能做得很好,因为我没有任何人可以提供建议,因此将帖子和代码放在这里。

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

现在只能遵循功能,但我想确保我的方法可以。请并感谢您的帮助。

参考方案

当前,在Question模型上没有什么可以区分up_vote和down_vote的,因此它将返回相同的查询。

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

这是文档
generic relations

处理后如何删除照片? - python

我的Django模型中有两个字段: class Staff(models.Model): photo = models.FileField(blank=True, null = True) encodings = JSONField() 我从表单获取照片,然后使用该照片获取编码。处理后如何删除照片?我试过了self.photo = None or self.…

如果django模型已经具有相关的类,如何将其转换为抽象模型 - python

可以说我有以下基本模型:class human(models.Model): gender = models.BooleanField() age = models.IntegerField() name = models.CharField(max_length=200) 还有两个继承它的模型:class superhero(human): can_fly…

Python GPU资源利用 - python

我有一个Python脚本在某些深度学习模型上运行推理。有什么办法可以找出GPU资源的利用率水平?例如,使用着色器,float16乘法器等。我似乎在网上找不到太多有关这些GPU资源的文档。谢谢! 参考方案 您可以尝试在像Renderdoc这样的GPU分析器中运行pyxthon应用程序。它将分析您的跑步情况。您将能够获得有关已使用资源,已用缓冲区,不同渲染状态上…

Python sqlite3数据库已锁定 - python

我在Windows上使用Python 3和sqlite3。我正在开发一个使用数据库存储联系人的小型应用程序。我注意到,如果应用程序被强制关闭(通过错误或通过任务管理器结束),则会收到sqlite3错误(sqlite3.OperationalError:数据库已锁定)。我想这是因为在应用程序关闭之前,我没有正确关闭数据库连接。我已经试过了: connectio…

Python exchangelib在子文件夹中读取邮件 - python

我想从Outlook邮箱的子文件夹中读取邮件。Inbox ├──myfolder 我可以使用account.inbox.all()阅读收件箱,但我想阅读myfolder中的邮件我尝试了此页面folder部分中的内容,但无法正确完成https://pypi.python.org/pypi/exchangelib/ 参考方案 您需要首先掌握Folder的myfo…