Django и Ajax: кнопка добавления в избранное в цикле for работает и вносит изменения в базу данных, но не изменяет цвет/название соответствующим образом
Мне трудно понять, почему мои кнопки избранного не меняют цвет и название при нажатии, чтобы соответствовать данным в базе данных. Я предполагаю, что это связано с тем, как я настроил булеву переменную 'is_fav', но я не смог найти решение. Любая помощь будет очень признательна!
вид:
def favourite_unfavourite(request):
html = None
#if request.method == 'POST':
activity_id = request.POST.get('activity_id')
activity = get_object_or_404(TherapyActivity, id=activity_id)
#is_fav = False
if activity.favourites.filter(id=request.user.id).exists():
activity.favourites.remove(request.user)
is_fav = False
else:
activity.favourites.add(request.user)
is_fav = True
context = {
'Activity': activity,
'is_fav': is_fav,
'value': activity_id
}
if request.is_ajax():
html = render_to_string('main/favourite_section.html', context, request=request)
return JsonResponse({'form': html})
страница html:
{% extends "main/index.html" %}
{% block title %}
<h1>View All</h1>
{% endblock %}
{% block content %}
{% for activity in activities %}
<div class="col-md-7 d-flex justify-content-between">
<li><a href="{{activity.get_absolute_url}}">{{activity.name}}</a> <br> {{activity.description}} </li>
<div id="favourite-section"> {% include 'main/favourite_section.html' with activity=activity %} </div>
</div>
{% endfor %}
{% endblock %}
включенный раздел:
{% if request.user.is_authenticated %}
<form action="{% url 'account:favourite_unfavourite' %}" method="post">
{% csrf_token %}
{% if fav %}
<button type="submit" id="favourite" name="activity_id" value="{{ activity.id }}" class="btn btn-danger">Unfavourite</button>
{% else %}
<button type="submit" id="favourite" name="activity_id" value="{{ activity.id }}" class="btn btn-primary">Favourite</button>
{% endif %}
</form>
{% endif %}
Ajax:
<script type="text/javascript">
$(document).ready(function(event){
$(document).on('click', '#favourite', function(event){
console.log("i'm clicked");
event.preventDefault();
var id = $(this).attr("value");
var url = '{% url "favourite_unfavourite" %}';
$.ajax({
type: 'POST',
url: url,
data: {
id: id,
csrfmiddlewaretoken: '{{ csrf_token }}'
},
dataType: 'json',
success: function(response){
$('#favourite-section').html(response['form'])
},
error: function(rs, e){
console.log(rs.responseText);
},
});
});
});
</script>