Вот проект, который я создал для практики, в моем models.py,
class Post(models.Model):
title = models.CharField(max_length = 140)
author = models.ForeignKey(User, on_delete=models.CASCADE)
votes = models.BigIntegerField(default=0, blank=True)
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='voter')
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='vpost')
@receiver(post_save, sender=Vote)
def update_votes(sender, **kwargs):
# # ??
Здесь у меня есть форма голосования, с которой пользователь может голосовать за любой конкретный пост.Эта часть работает хорошо.
Вот мой вопрос: всякий раз, когда пользователь голосует за конкретное сообщение, я хочу, чтобы поле голосов в модели поста также увеличивалось.
Я знаю, что могу показать его с {{post.vpost.count}} в моем HTML.Но я хочу это приращение здесь.
Другой способ, который я пробовал,
class Vote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE, related_name='voter')
post = models.ForeignKey(Post, on_delete=models.CASCADE, related_name='vpost')
def update_votes(self):
p = self.post
p.votes += 1
p.save()
Этот работает только один раз, не работает во второй раз, поэтому я хочу использовать метод сигнала.Так как же я могу обновить поле голосования в модели Post, используя сигнал?