Как заставить django перенаправить пользователя на нужную мне страницу? - PullRequest
1 голос
/ 24 апреля 2020

Как заставить django перенаправить пользователя на нужную мне страницу?

У меня есть веб-приложение. Например, пользователь находится на странице с локальным адресом: 8000 / detail-order / 18. Эта страница является подробной информацией о заказе 18. На этой странице находится ссылка для редактирования этого заказа. Когда пользователь нажимает эту ссылку, появляется форма редактирования заказа. Когда пользователь пишет в этой форме и нажимает кнопку отправки, у него появляется ошибка. Мне бы хотелось, чтобы пользователь вернулся к локальному: 8000 / detail-order / 18.

NoReverseMatch в / update-orders / 18

Обратный для 'detail_order' без аргументов, не найденных. Попробован 1 шаблон (ов): ['detail \ -order / (? P [0-9] +) $']

Метод запроса: POST

URL запроса: http://192.168.0.249: 8000 / update-orders / 18

Django Версия: 3.0.5

Тип исключения: NoReverseMatch

Значение исключения:

Обратное для 'detail_order' без аргументов не найдено. Попробован 1 шаблон (ов): ['detail \ -order / (? P [0-9] +) $']

Местоположение исключения: /root/.local/share/virtualenvs/myp4-4l8n6HJk/ lib / python3 .7 / site-packages / django / urls / resolvers.py в _reverse_with_prefix, строка 677

urls.py

from django.contrib import admin
from django.urls import path, include
from .views import *
from print import views

urlpatterns = [
    path('', views.home_page, name='index'),
    path('orders', views.OrderCreateView.as_view(), name='orders'),
    path('update-orders/<int:pk>', views.UpdateOrderView.as_view(), name='update_order'),
    path('delete-orders/<int:pk>', views.DeleteOrderView.as_view(), name='delete_order'),
    path('detail-order/<int:pk>', views.DetailOrderView.as_view(), name='detail_order'),
]

views.py

class UpdateOrderView(CustomSuccessMessageMixin, UpdateView):
    model = Order
    template_name = 'orders.html'
    form_class = OrderForm
    success_url = reverse_lazy('detail_order')# HERE
    success_msg = 'Изменения сохранены'
    def get_context_data(self, **kwargs):
        kwargs['update'] = True
        return super().get_context_data(**kwargs)

1 Ответ

2 голосов
/ 24 апреля 2020

Вы можете переопределить метод .get_success_url(..) [Django -doc] и таким образом ввести параметры:

from django.urls import reverse

class UpdateOrderView(CustomSuccessMessageMixin, UpdateView):
    model = Order
    template_name = 'orders.html'
    form_class = OrderForm
    success_msg = 'Изменения сохранены'

    def get_context_data(self, **kwargs):
        kwargs['update'] = True
        return super().get_context_data(**kwargs)

    def <b>get_success_url</b>(self):
        return reverse('detail_order', kwargs={'pk': self.object.pk})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...