【问题标题】:Don't want to validate a DateField in wtforms but want to keep the Date format不想在 wtforms 中验证 DateField 但想保留 Date 格式
【发布时间】:2016-05-04 11:22:51
【问题描述】:

我的表格是这样的:

forms.py

​​>
class FollowUpForm(Form):
assigned_to_user_id = SelectField("Assigned to", coerce=int)
planned_followup_date = DateField("Planned Followup Date", [validators.DataRequired("Date is required")], format="%Y-%b-%d")
actual_followup_date = DateField("Actual Followup Date",format="%Y-%b-%d")
notes = TextAreaField("Notes", [validators.DataRequired("Notes is required")])
status = SelectField("Status", choices = zip(status_categories, status_lebels))

我不想验证 actual_followup_date 字段,但想保留日期格式。

我的html表单是这样的

<div class="modal fade bs-example-modal-lg" tabindex="-1" role="dialog" id="FollowUpFormPopUp">
        <div class="modal-dialog modal-lg">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal" aria-label="Close"><div aria-hidden="true">&times;</div></button>
                    <h4 class="modal-title" id="myModalLabel"><strong> Followup Form</strong></h4>
                </div>
                <div class="modal-body">
                    <div class="form-wrap">
                        <form id="SubmitFollowUpForm">
                        <div class="form-group" >
                            {{ followup_form.assigned_to_user_id.label }}
                            {{ followup_form.assigned_to_user_id(class_="form-control", type="select") }}
                            <span class="help-block"></span>
                          </div>
                            <div class="form-group " >
                                {{ followup_form.planned_followup_date.label }}
                                {{ followup_form.planned_followup_date(class_="form-control", **{"data-parsley-required":"true", 
                                                                          "data-parsley-required-message":"Planned Followup Date is required",
                                                                          "data-provide":"datepicker",
                                                                       "data-date-format":"yyyy-M-dd"}) }}
                                <span class="help-block"></span>
                            </div>
                            <div class="form-group " >
                                {{ followup_form.actual_followup_date.label }}
                                {{ followup_form.actual_followup_date(class_="form-control", **{"data-parsley-required":"false", 
                                                                          "data-provide":"datepicker",
                                                                       "data-date-format":"yyyy-M-dd"}) }}
                                <span class="help-block"></span>
                            </div>
                           <div class="form-group " >

                                {{ followup_form.notes.label }}
                                {{ followup_form.notes(class_="form-control", rows=10, type="text", **{"data-parsley-required":"true", 
                                                                          "data-parsley-required-message":"Notes is required",
                                                                           }) }}
                                <span class="help-block"></span>
                          </div>
                          <div class="form-group" >
                            {{ followup_form.status.label }}
                            {{ followup_form.status(class_="form-control", type="select") }}
                            <span class="help-block"></span>
                          </div>

                          <button type="submit" class="btn btn-primary btn-block" id="FollowUpSubmitBtn">SUBMIT</button>
                        </form>
                    </div>
                </div>
            </div>
        </div>
    </div>

当我提交表单时未向 Actual_followup_date 提供任何值..它出现错误 "not a valid date format" 。但是在这种情况下,我想将空值存储到数据库中,并且不希望出现这个跨度错误。你可以看到这个错误的屏幕截图..

请给我建议..谢谢..

【问题讨论】:

    标签: python flask jinja2 wtforms


    【解决方案1】:

    您需要向您的实际跟进日期字段添加一个可选类型的验证器,如下所示:

    from wtforms.validators import ..., Optional
    
    
    ...
    actual_followup_date = DateField("Actual Followup Date",format="%Y-%b-%d",[validators.Optional()])
    ...
    

    这将允许您不输入任何内容,只会将 None 值推送到数据库。

    【讨论】:

    • 谢谢..但出现错误...TypeError: 'Optional' object is not iterable
    • 是我的一个错误,它实际上是 DateField("Actual Followup Date",format="%Y-%b-%d",[validators.Optional()])
    【解决方案2】:

    创建自定义验证器。

    def customValidatorForFollowupDate(form, field):
        if not form.actual_followup_date.data:
            field.errors[:] = []
            raise StopValidation()
    

    并像这样使用它-

    class FollowUpForm(Form):
        assigned_to_user_id = SelectField("Assigned to", coerce=int)
        planned_followup_date = DateField("Planned Followup Date", [validators.DataRequired("Date is required")], format="%Y-%b-%d")
        actual_followup_date = DateField("Actual Followup Date",[customValidatorForFollowupDate], format="%Y-%b-%d")
        notes = TextAreaField("Notes", [validators.DataRequired("Notes is required")])
        status = SelectField("Status", choices = zip(status_categories, status_lebels))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-25
      • 2015-11-07
      • 2017-06-26
      • 2014-05-02
      • 1970-01-01
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多