Я работаю над системой голосования (голосование вверх и голосование вниз), а функциональность - следуйте.
Я хочу, чтобы это было сделано хорошо, потому что мне некому посоветовать, я разместил здесь пост и код.
Функция Follow - должна показывать, сколько подписчиков и кто они. Я использовал здесь отношение m2m с промежуточной моделью Follower.
Мой вопрос - это правильный подход к теме - использование 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
Сейчас работает только функция отслеживания, но я хочу убедиться, что мой подход в порядке. Пожалуйста и спасибо за вашу помощь.