Вы определяете список с именем likers
в функции like
. Это означает, что каждый раз, когда кто-то вызывает функцию like
, вы создаете новый и пустой список.
Вы можете создать список вне функции, но это тоже не поможет. Фактически единственные данные, которые вы можете считать постоянными (данные, которые вы можете вставить / изменить / удалить так, чтобы при следующем вызове были обнаружены эти различия), находятся в базе данных.
В результате вы должны позволить базе данных хранить людей, которым нравится публикация, например, добавив ManyToManyField
к модели Post
, которая относится к пользователям, которые любили публиковать сообщения. Таким образом, вы должны отредактировать модель:
class Post(Model):
<b>likers = ManyToManyField(User)</b>
# some other fields
likes_total = IntegerField()
Теперь мы можем добавить пользователя, которому нравится этот пост, в отношение «многие ко многим»:
def like(request, post_id, group_id):
group = get_object_or_404(Group, pk= group_id)
post = get_object_or_404(Post, pk= post_id)
if request.method == 'POST':
if request.user in <b>post.likers.all()</b>:
return render(request, 'groups/detail.html', {'group':group, 'error': "you have already liked this post"} )
else:
post.likes_total += 1
<b>post.likers.add(request.user)</b>
post.save()
return redirect('/groups/' + str(group_id) )
else:
return render(request, 'groups/detail.html', {'group':group})
Еще одно улучшение, которое вы можете сделать, - это использовать reverse
для генерации URL-адресов вместо того, чтобы создавать URL-адреса самостоятельно.