Вам нужна модель Upvote
с внешним ключом для модели Post
. Возьмите это в качестве примера:
class Upvote(models.Model):
user = models.ForeignKey(User, on_delete=models.CASCADE)
post = models.ForeignKey(Post, on_delete=models.CASCADE)
Как только пользователь проголосует за сообщение, вы создаете строку в таблице Upvote
. Вы можете проверить, не проголосовал ли пользователь за публикацию с помощью блока попытки:
try:
upvote = Upvote.objects.get(post=some_post, user=some_user)
# User has upvoted
# Response accordingly
except Upvote.DoesNotExist:
upvote = Upvote(post=some_post, user=some_user)
# Create the upvote
Редактировать
Относительно вашей ошибки, когда вы создаете или запрашиваете новый экземпляр модель с внешним ключом, вы должны передать экземпляр внешнего ключа, а не сам класс. Вы сейчас:
upvote = Upvote(post=Post, user=current_user)
# Notice the Post
Post
является определением класса Post
. Что вам нужно сделать, это создать / получить экземпляр класса Post
и передать его. такие как:
post_instance = Post.objects.get(pk=2) # Or whatever query you might need to use or even creating a new post
upvote = Upvote(post=post_instance, user=current_user)