Django: перенаправление со страницы, если поле модели имеет определенное значение - PullRequest
0 голосов
/ 06 июня 2018

У меня есть представление на основе классов, которое отправляет пользователя на веб-страницу для просмотра элемента.Пользователь может нажать на кнопку редактирования, чтобы редактировать страницу, однако я не хочу, чтобы пользователь всегда мог редактировать страницу.После того как поле («статус») в модели установлено как «заполнено», я бы хотел, чтобы пользователь больше не мог обновлять страницу.У меня есть представление на основе класса.Как перенаправить пользователя на другой URL-адрес (например, URL-адрес просмотра), если статус = завершен?Мой текущий подход состоит в том, чтобы иметь форму, которая выдает ошибку, если статус поля установлен как заполненный.Это не идеально, так как человек все еще видит редактирование и может задаться вопросом, почему оно выдает ошибку.

urls.py

url(r'^update/(?P<status_id>[0-9A-Za-z]+)/$', ThingUpdateView.as_view(), name='update'),

представление на основе классов

class ThingUpdateView(LoginRequiredMixin, UpdateView):
    model      = Thing
    form_class = ThingChangeForm
    template_name = 'thing/thing_update.html'

Ответы [ 2 ]

0 голосов
/ 06 июня 2018

Один из подходов может заключаться в том, что вы используете Javascript для этой цели.Установите для элемента формы значение «завершено» и запустите функцию JS window.location () , чтобы перенаправить пользователя, если для этого параметра установлено значение «завершено».

0 голосов
/ 06 июня 2018

Попробуйте переопределить render_to_response метод для обработки GET запросов и form_valid для обработки POST и PUT:

from django.shortcuts import redirect

class ThingUpdateView(LoginRequiredMixin, UpdateView):
    model      = Thing
    form_class = ThingChangeForm
    template_name = 'thing/thing_update.html'

    def render_to_response(self, context, **response_kwargs):
        if self.object.status == 'completed':
            return redirect('some-view-name') 
        return super().render_to_response(context, **response_kwargs) 

    def form_valid(self, form):
        if self.object.status == 'completed':
            return redirect('some-view-name') 
        return super().form_valid(form)
...