Как добавить объект в список просмотра пользователя через ссылку в Django

У меня есть сайт, который рекомендует аниме, и я хочу, чтобы каждое аниме имело некоторый текст помимо них, когда они появляются, предлагая добавить в "список" пользователя, который является страницей, где будут показаны все аниме в уникальном списке пользователя. У меня это работает, и я могу добавлять через админку django, но не через кнопку на сайте.

models.py

class UserList(models.Model):
    user = models.OneToOneField(User, on_delete=models.CASCADE)
    anime_in_list = models.ManyToManyField(Anime, blank=True)

views.py

@login_required
def userList(request):
    return render(request, 'userlist.html')

def add_to_userlist(request, anime_id):
    new_anime = get_object_or_404(Anime, pk=anime_id)
    #if UserList.objects.filter(user=request.user, anime_in_list=anime_id).exists():
        #message fail
    user_list, created = UserList.objects.get_or_create(user=request.user)
    user_list.anime_in_list.add(new_anime)
    return render(request, "userlist.html")

на html, где показывают аниме

<a href="{% url 'add_to_userlist' anime.id %}" role="button" class="btn btn-outline-success btn-lg">Add to list?</a>

urls.py

urlpatterns = [
   ...
   path('userlist/', user_views.userList, name='userlist'),
   path('anime/', AnimeListView.as_view(), name='all-anime'),
   ...
]

но при переходе на html-страницу аниме теперь ошибка NoReverseMatch at /anime/ Обратное соответствие для 'add_to_userlist' не найдено. 'add_to_userlist' не является допустимой функцией представления или именем шаблона.

Но я не хочу создавать отдельный url для их перенаправления, я просто хочу нажать на кнопку добавления в список пользователей, и если пользователь теперь перейдет в свой /userlist, он обнаружит, что он обновлен аниме, на которое он нажал ссылку.

Любая помощь будет очень признательна, ty

Я не эксперт, но вы можете попробовать вернуть пустой HttpResponse

from django.http import HttpResponse
return HttpResponse('')

и на стороне клиента сделайте AJAX вызов к этому представлению. Смотрите здесь

или даже лучше возвращать json, который содержит информацию о том, что процесс прошел успешно или нет, и правильно обрабатывать этот результат на стороне js.

from django.http import JsonResponse
return JsonResponse({'status':'Anime already added'})

Требуется JQuery

$.getJSON( "<django view url>", function(data) {
   console.log( "success" );
}).done(function() {
   console.log( "second success" );
})
.fail(function() {
  console.log( "error" );
})
.always(function() {
   console.log( "complete" );
});
Вернуться на верх