Обратный Django-объект 'str' не имеет атрибута 'get' - PullRequest
0 голосов
/ 28 июня 2019

Я пытаюсь использовать обратный метод в представлении django, но я получил исключение: у объекта str нет атрибута get.

вот мой взгляд

class AbandonTicketView(View):
    context = dict()
    template_name = "places/order_detail.html"

    def get(self, request, uidb64, token, ordercode):
        order = abandon_oder(uidb64, token, ordercode)
        if order is not None and order.paid is False:
            return reverse("order_detail", kwargs={"ordercode": order.code})
        return redirect("tickets")

посмотреть, что я хочу пойти:

class OrderDetailView(LoginRequiredMixin, View):
    template_name = "places/order_detail.html"
    context = dict()

    def get(self, request, ordercode):
        order = Order.objects.get(code=ordercode)
        self.context["order"] = order
        self.context["key"] = settings.tycoon.STRIPE_PUBLISHABLE_KEY

        if order.send_count >= 3 and order.paid is False:
            self.context["abandon_ticket"] = "Order was canceled"
        return render(request, template_name=self.template_name, context=self.context)

    def post(self, request, ordercode):
        order = pay_for_ticket(ordercode, request.POST["stripeToken"], request.user)
        self.context["order"] = order
        return render(request, template_name=self.template_name, context=self.context)

вот URL:

 path("orders/<code:ordercode>/detail/", views.OrderDetailView.as_view(), name="order_detail"),
 path("tickets/", views.OrderedTicketsView.as_view(), name="tickets"),

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

1 Ответ

3 голосов
/ 28 июня 2019

reverse() возвращает строку, но ваше представление должно возвращать HttpResponse.

Измените строку:

return reverse("order_detail", kwargs={"ordercode": order.code})

, чтобы также использовать redirect() (как и другиечасть вашего взгляда)

return redirect("order_detail", args=[order.code, ])

или, может быть, даже упрощенно как это

return redirect("order_detail", order.code)

Это работает?

...