【问题标题】:How to redirect to url by cancel button in django-crispy-forms?如何通过 django-crispy-forms 中的取消按钮重定向到 url?
【发布时间】:2016-02-14 08:03:59
【问题描述】:
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

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

self.helper.layout[-1] = FormActions(
        Submit('add_button',u'Зберегти', css_class='btn btn-primary'),
        Submit('cancel_button', u'Скасувати'),
        )

仅在 createview 提交取消时无法正常工作。单击时,它会尝试检查表单,并且当我想取消时,脆皮会回答我解决表单上的所有问题。我已将提交更改为按钮,而按钮取消完全没有效果。我在 stackoverflow 上找到了一个变体,向按钮添加了 onclick 方法,但它不适合我( 当我在重定向窗口信息消息上取消或发布表单时,会告诉我发布或取消的状态。因此,当我尝试 onclick 方法时,它会推送到过去的页面,因此未显示信息消息。 如何解决 CreateView 上的取消问题?

【问题讨论】:

    标签: django forms model-view-controller views django-crispy-forms


    【解决方案1】:

    添加Cancel按钮并在onclick事件中使用window.location.href

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

    【讨论】:

    • 如果需要进入详情页,请使用reverse('your-detail-page-url-name', args=[self.instance.id])
    【解决方案2】:

    如果您愿意,另一种方法是按原样传递 HTML:

        from crispy_forms.layout import HTML
        self.helper.layout = Layout(
                Fieldset(
                    'Title',
                    'field1',
                    'field2',
                    'field3'
                ),
                FormActions(
                            Submit('save', 'Save'),
                            HTML('<a class="btn btn-primary" href="/">Cancel</a>')
                        )
         )
    

    【讨论】:

      【解决方案3】:
      self.helper.layout.append(
                  FormActions(
                      submit,
                      Submit('cancel_button', u'Скасувати', css_class="btn btn-link"),
                  )
              )
      

      【讨论】:

        【解决方案4】:

        这很奇怪,但有效:

        from crispy_forms.bootstrap import FormActions
        from crispy_forms.layout import Fieldset, HTML, Layout, Submit
        
        rows = [el for el in self.fields]  # self == form
        rows.append(
            FormActions(
                Submit('Save', _('Save')),
                HTML(f'<a href="{reverse("focov:choose-regulation")}" class="btn btn-outline-secondary">{_("Cancel")}</a>'),
            css_class="row"),
        )
        self.helper.layout = Layout(
            Fieldset('', *rows),
        )
        

        【讨论】:

        • 也许最新版本有新功能。
        猜你喜欢
        • 2012-04-25
        • 2021-09-22
        • 2013-08-26
        • 2023-03-24
        • 1970-01-01
        • 2012-06-29
        • 2015-12-27
        • 2016-09-06
        • 2014-02-10
        相关资源
        最近更新 更多