Недавно я делал оценивание записей и столкнулся с проблемой редиректа, после нажатия на кнопку лайка, пользователя перенаправляло на url и связанную с ним функцию, после этого происходил ридерект обратно на главную страницу. Получается, что если пользователь слушал какую-либо музыку и в это время захотел оценить ее, главная страница обновлялась, следовательно аудиозапись прекращалась. Как можно реализовать это без редиректа и обновления?
urls.py
path('scoring/<str:pk>', like_or_dislike, name='score'),
path('',main, name = 'main'),
views.py
def like_or_dislike(request, pk):
liked = new_sg.objects.get(id=pk)
if request.user in liked.like.all():
liked.like.remove(request.user)
liked.like_counts = liked.like_counts - 1
liked.save()
else:
liked.like.add(request.user)
liked.like_counts = liked.like_counts + 1
liked.save()
return HttpResponseRedirect('/')
def main(request):
track = new_sg.objects.all()
#take = new_sg.objects.get(pk = new_sg_id)
genre = rub.objects.all()
user_on = User.objects.all()
context = {'track' : track,'user_on':user_on,'genre' : genre,}
return render(request,'main/main.html',context)
models.py
class new_sg(models.Model):
song = models.CharField(max_length = 50,verbose_name = "Название трека:")
opis = models.ForeignKey('opisan', on_delete = models.DO_NOTHING, default='', null=False, blank = False)
text = models.TextField(verbose_name='Описание к песне, Ваши соцести и прочее...', default='', )
artist = models.ForeignKey(User,on_delete = models.CASCADE,verbose_name = 'Артист',null = False,blank = False,default = '',related_name = 'author')
published = models.DateTimeField(auto_now_add = True,db_index = True,verbose_name = 'Дата публикации')
add_mus = models.FileField(upload_to = 'arch/for_main',verbose_name = 'Файл', null = False,blank = False,default = '')
genre = models.ForeignKey('rub', null = False,on_delete = models.PROTECT,verbose_name = 'Жанр',default = '')
views = models.IntegerField(default = 0)
potr = models.ManyToManyField(User,through = 'UserSongRalation',related_name = 'potr')
like = models.ManyToManyField(User, blank=True)
like_counts = models.IntegerField(default=0)