我致力于投票系统(投票赞成和投票反对)和功能 - 关注。 我希望它能做好,因为我没有人可以建议,我把帖子和代码放在这里。
关注功能 - 它应该显示有多少关注者以及他们是谁。我在这里使用了带有中间模型 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/