Как добавить объект в список просмотра пользователя через ссылку в 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" );
});