【问题标题】:Django form wizard: How to validate forms manuallyDjango 表单向导:如何手动验证表单
【发布时间】:2020-09-22 20:44:50
【问题描述】:

我一直在阅读表单向导文档,试图寻找一种可以修改请求的方法。POST 验证表单之前。在调用is_valid() 之后似乎只有处理数据的方法。

修改是指:

  updated_request = request.POST.copy()

  updated_request.update({
       'artist': request.user.profile.person.id,
       'musicLength': 60, # Just a placeholder, will be changed during validations
  })

  mainForm = UploadSingle(updated_request, request.FILES, instance=instance)

这样做的主要原因是因为我正在使用 ajax,其中一些其他数据正在与请求一起传递。我希望能够自己验证,而不是表单向导在幕后进行验证

【问题讨论】:

    标签: django django-formwizard


    【解决方案1】:

    我认为您需要覆盖模型的 save() 函数并创建自己的验证规则。

    Check this article

    【讨论】:

    • 不,这不是我想要的。我希望能够在像MyForm(request.POST, request.FILES) 那样实例化之前修改request.POST。我主要想向request.POST添加额外的字段数据
    【解决方案2】:

    最适合我的方法是 jQuery 验证器,您可以在此线程中查看更多详细信息:

    How to add validation rules with messages in jQuery validation?

    例如:

    $(document).ready(function () {
    
        $("#account_info").validate({
            rules: {
                phone_number: {
                    required: true
                },
                recipient_name: {
                    required: true,
                    minlength: 6  // <-- removed underscore
                }
            },
            messages: {
                phone_number: {
                    required: "this field is required"
                },
                recipient_name: {
                    required: "Enter recipient name",
                    minlength: "Name should be at least {0} characters long" // <-- removed underscore
                }
            },
            submitHandler: function (form) { // for demo
                alert('valid form');  // for demo
                return false;  // for demo
            }
        });
    
    });
    

    【讨论】:

      【解决方案3】:

      好的,终于找到了解决办法。我所要做的就是覆盖WizardView.get_form()post()。正如get_form 的表单向导文档中所述:

      此方法为给定步骤构造表单。

      post() 是不言自明的。我最终覆盖了post,因为我需要将JsonResponse 返回给我的ajax 调用。

      【讨论】:

        猜你喜欢
        • 2016-04-08
        • 1970-01-01
        • 2019-07-08
        • 1970-01-01
        • 2013-05-24
        • 1970-01-01
        • 2015-11-21
        • 2014-04-18
        • 2013-08-17
        相关资源
        最近更新 更多