Я реализую функциональность Like в веб-приложении.Идея проста - перечислить количество постов (блогов) на домашней странице и добавить кнопку «Мне нравится» к каждому посту (блогу).Он работает нормально, когда я создаю его с обычным
<form action='{% url target %}' method='POST'>
Но когда я реализовал это с помощью вызова AJAX, он позволяет мне только понравиться или не понравиться конкретному сообщению (блогу) один раз. Один Мне понравился поств первый раз это работает, также когда мне не нравится тот же пост, он работает нормально, но когда мне снова нравится этот пост, он выдает django.db.utils.OperationalError: database is locked
Кроме того, когда мне нравится один и тот же пост несколько раз (от 4 до 5)это реагирует странным образом.Я захожу в петлю сообщений о симпатиях и антипатиях.
like_section.html
<form id="like-form{{ post.id }}">
{% csrf_token %}
<button type="submit" id="{{ post.id }}btn" name="like" value="{{ post.id }}" class="btn upvote">Like</button>
<script type="text/javascript">
{% for like in post.likes.all %}
{% if like != user %}
dislikingPost("{{ post.id }}btn");
{% else %}
likingPost("{{ post.id }}btn");
{% endif %}
{% endfor %}
$(document).ready(function(event){
$(document).on('click', '#{{ post.id }}btn', function(event){
event.preventDefault();
pk = $(this).attr('value');
$.ajax({
type: 'POST',
url: '{% url "like_post" %}',
data: {
'id': pk,
'csrfmiddlewaretoken': '{{ csrf_token }}'
},
success:function(response){
$('#like-form{{ post.id }}').html(response['form'])
// $('#{{ post.id }}btn').style.color = 'green';
}, error: function(er, e){
console.log(er.responseText);
}
});
});
});
</script>
</form>
views.py:
def like_post(request):
all_posts = Posts.objects.all()
print("Insisde Like Post")
print('ID coming from form is', request.POST.get('id'))
post = get_object_or_404(Posts, id=request.POST.get('id')) # for AJAX call
context = {
'all_posts': all_posts,
'post': post
}
if post.likes.filter(id=request.user.id).exists():
post.likes.remove(request.user) # Liking The Post
print("DisLiking the post")
else:
post.likes.add(request.user)
print("Liking the post")
if request.is_ajax():
print('Hey its an AJAX calls') # TEsting AJAX request
html = render_to_string('like_section.html', context, request=request)
return JsonResponse({'form': html})
Примечание: 1. Я новичок в AJAX,2. Я знаю, что SQLite не может обрабатывать избыточные вызовы, но почему раньше он работал без вызовов AJAX.3. Я не предоставляю models.py и полный шаблон домашней страницы, и я не думаю, что они требуются.