Django:如果模型字段是特定值,则从页面重定向

时间:2018-06-06 04:31:10

标签: django django-class-based-views

我有一个基于类的视图,可以将用户发送到网页以查看项目。用户可以单击编辑按钮来编辑页面,但是,我不希望用户始终能够编辑页面。在模型中的字段('状态')设置为“已完成”后,我希望用户无法再更新该页面。我有一个基于类的视图。如果状态=已完成,如何将用户重定向到其他网址(例如视图网址)?我目前的方法是,如果字段状态设置为已完成,则表单会出错。它不理想,因为这个人仍然看到编辑,可能想知道为什么它会出错。

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 :(得分:3)

尝试覆盖render_to_response方法来处理GET个请求,并form_valid来处理POSTPUT

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)

答案 1 :(得分:0)

一种方法是您可以使用Javascript来实现此目的。将表单元素的值设置为“completed”并运行 JS函数window.location(),以便在将值设置为“completed”时重定向用户。