如何通过 django-crispy-forms 中的取消按钮重定向到 url?

Ole*_*siy 7 forms django model-view-controller views django-crispy-forms

class StudentCreateView(CreateView):
    model = Student
    template_name = "students/students_edit.html"
    form_class = StudentCreateForm

def get_success_url(self):
    return u'%s?status_message=??????? ??????? ?????????' % reverse('home')

def post(self, request, *arg, **kwargs):
    if request.POST.get('cancel_button'):
        messages.info(self.request, u"????????? ?????????")
        return HttpResponseRedirect(
            u'%s?status_message=????????? ?????????'
            % reverse('home'))
    else:
        messages.success(self.request, u"??????? ??????? ?????????") 
        return super(StudentCreateView, self).post(
            request,*arg, **kwargs)
def get_context_data(self, **kwargs):
    context = super(StudentCreateView, self).get_context_data(**kwargs)
    context['meta'] = u'????????? ????????'
    context['headtext'] = context['meta']
    return context
Run Code Online (Sandbox Code Playgroud)

在此视图中,如果单击取消按钮,我会检查发布功能

self.helper.layout[-1] = FormActions(
        Submit('add_button',u'????????', css_class='btn btn-primary'),
        Submit('cancel_button', u'?????????'),
        )
Run Code Online (Sandbox Code Playgroud)

只有在 createview 提交取消不能正常工作。单击它会尝试检查表单,当我想取消时,它会回答我以解决表单上的所有问题。我已将提交更改为按钮,按钮取消根本不起作用。我在 stackoverflow 上发现了一个变体,将 onclick 方法添加到按钮,但它不适合我(当我在重定向窗口信息消息上取消或发布表单时,它告诉我发布或取消的状态。所以当我尝试 onclick 方法时,它推送了过去的页面,所以没有显示信息消息。如何修复 CreateView 上的取消?

Yar*_*hol 6

添加Cancel按钮并window.location.hrefonclick事件中使用:

self.helper.add_input(Button('cancel', 'Cancel', css_class='btn-primary',
                             onclick="window.location.href = '{}';".format(reverse('your-cancel-url-name'))))
Run Code Online (Sandbox Code Playgroud)


小智 2

self.helper.layout.append(\n            FormActions(\n                submit,\n                Submit('cancel_button', u'\xd0\xa1\xd0\xba\xd0\xb0\xd1\x81\xd1\x83\xd0\xb2\xd0\xb0\xd1\x82\xd0\xb8', css_class="btn btn-link"),\n            )\n        )\n
Run Code Online (Sandbox Code Playgroud)\n