Ошибка типа в /posts/12/tesing/like/ quote_from_bytes() ожидаемые байты

#python #django #django-models #django-rest-framework #django-views

#python #django #django-модели #django-rest-framework #django-просмотры

Вопрос:

Ну, я пытаюсь добавить подобный переключатель или кнопку like в свой проект и получил эту ошибку. Как я могу исправить эту ошибку?

view.py

 class PostLikeToggle(RedirectView):
    
    def get_redirect_url(self, *args, **kwargs):
        slug=self.kwargs.get('slug')
        print(slug,'slug')
        pk=self.kwargs.get('pk')
        print(pk,'pk')
        obj =get_object_or_404(Post,pk=pk,slug=slug)
        print(obj,'post')
      
        user=self.request.user
        if user.is_authenticated:
            if user in obj.likes.all():
                obj.likes.remove(user)
            else:
                obj.likes.add(user)
        return redirect(f'/posts/{pk}/{slug}')
  

трассировка:

 Traceback (most recent call last):
  File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersexception.py", line 34, in inner
    response = get_response(request)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersbase.py", line 115, in _get_response
    response = self.process_exception_by_middleware(e, request)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangocorehandlersbase.py", line 113, in _get_response
    response = wrapped_callback(request, *callback_args, **callback_kwargs)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangoviewsgenericbase.py", line 71, in view
    return self.dispatch(request, *args, **kwargs)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangoviewsgenericbase.py", line 97, in dispatch
    return handler(request, *args, **kwargs)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangoviewsgenericbase.py", line 193, in get
    return HttpResponseRedirect(url)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangohttpresponse.py", line 485, in __init__
    self['Location'] = iri_to_uri(redirect_to)
  File "C:UsersAHMEDanaconda3libsite-packagesdjangoutilsencoding.py", line 147, in iri_to_uri
    return quote(iri, safe="/#%[]=:;$amp;() ,!?*@'~")
  File "C:UsersAHMEDanaconda3liburllibparse.py", line 839, in quote
    return quote_from_bytes(string, safe)
  File "C:UsersAHMEDanaconda3liburllibparse.py", line 864, in quote_from_bytes
    raise TypeError("quote_from_bytes() expected bytes")

Exception Type: TypeError at /posts/12/tesing/like/
Exception Value: quote_from_bytes() expected bytes
  

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

Ответ №1:

get_redirect_url должна возвращать строку, а не HttpResponse

Измените его на:

 return f'/posts/{pk}/{slug}'