【问题标题】:Can I use Form inheritance for only some fields? Validation error我可以只对某些字段使用表单继承吗​​?验证错误
【发布时间】:2021-10-24 03:12:16
【问题描述】:

我有一个父表单和两个子表单,而不是从它继承 -

class ParentForm(FlaskForm):
    number_a = StringField('A',
                           validators=[DataRequired()],
                           render_kw={"placeholder":"A", 'class_':'input', 'id':'number_a'})
    number_b = StringField('B',
                           validators=[DataRequired()],
                           render_kw={"placeholder":"B", 'class_':'input', 'id':'number_b'})

class Child1Form(ParentForm):
    number_c = StringField('C',
                           validators=[DataRequired()],
                           render_kw={"placeholder":"C", 'class_':'input', 'id':'number_c'})

class Child2Form(ParentForm):
    number_d = StringField('D',
                           validators=[DataRequired()],
                           render_kw={"placeholder":"D", 'class_':'input', 'id':'number_d'})

对于 Child1Form,我需要 number_a、number_b 和 number_c。

对于 Child2Form 我需要 number_b 和 number_d,但我不需要 number_a,所以我不提交。当我发布 Child2Form 时,这会导致验证错误,因为在 ParentForm 字段中是必需的。

我应该如何解决这个问题?基本上在某些表单上我需要验证 number_a 字段,在其他表单上我需要忽略它。但我不想多次输入,因为我可能会有非常多的表格。

希望我明白了我的意思,如果不是这样,请告诉我。

【问题讨论】:

    标签: python oop flask flask-wtforms wtforms


    【解决方案1】:

    这听起来就像“拒绝遗赠”的 OOP 中的设计问题。孩子不应该做的事情。

    您应该只安排继承层次以满足子类的需要:

    class ParentForm_B(FlaskForm):
        number_b = ...
    
    class ParentForm(ParentForm_B):
        number_a = ...
    
    class Child1Form(ParentForm):
        number_c = ...
    
    class Child2Form(ParentForm_B):
        number_d = ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-06
      • 2014-06-11
      • 2010-11-26
      • 2011-01-05
      • 2016-02-08
      相关资源
      最近更新 更多