【问题标题】:Validating StringField based on input in a separate Field on WTForms根据 WTForms 上单独字段中的输入验证 StringField
【发布时间】:2020-01-15 15:22:26
【问题描述】:

我正在制作一个表单,用户可以借此管理企业的库存。具体来说,我希望能够在 StringField 中添加一定数量的库存,而在单独的 StringField 中 - 能够添加不超过添加的库存数量的销售额。

我还想知道是否可以让用户只在字段中输入数字。我曾尝试使用 IntegerField,但最终出现名称错误,指出 IntegerField 无法识别。

from wtforms import Form, StringField, RadioField, SelectField, TextAreaField, validators
class CreateGPUForm(Form):
    GPUBrand = SelectField('GPU Brand',default='NVIDIA' ,choices=[('NVIDIA', 'NVIDIA'),('MSI/Micro Star International', 'MSI/Micro Star International'),('Zotac', 'Zotac'),('EVGA', 'EVGA'),('Galax', 'Galax'),('Power Color', 'Power Color'),('Sapphire', 'Sapphire')], render_kw={'readonly': False})
    GPUName = StringField('GPU Name/Series', [validators.Length(min=1), validators.DataRequired()], render_kw={'readonly': False})
    GPUStock = IntegerField('Enter GPU Stock To Add', [validators.Length(min=1), validators.DataRequired()])
    GPUUnitPrice = StringField('GPU Manufacturing Price', [validators.Length(min=1), validators.DataRequired()], render_kw={'readonly': False})
    GPUSalePrice = StringField('GPU Retail Price', [validators.Length(min=1), validators.DataRequired()], render_kw={'readonly': False})
    GPUSales = StringField('Amount of GPUs Sold', [validators.Length(min=1), validators.DataRequired()], render_kw={'readonly': False})

【问题讨论】:

    标签: python flask flask-wtforms wtforms


    【解决方案1】:

    要在提交到服务器之前进行客户端验证,您需要使用 Javascript。

    如果您想在用户提交表单后进行服务器端验证(以便您可以在刷新的表单上重新发送错误),您可以编辑验证钩子:

    class CreateGPUForm(Form):
        # ...
        def validate(self):
            """Overwrite the Base validation function"""
            rv = Form.validate(self)
            if not rv:
                return False
    
            # now custom validation code:
            if self.GPUSales.data > self.GPUStock.data:
                self.GPUSales.errors.append('There is not enough stock...') 
                return False
            return True
    

    有一个 IntegerField 但您尚未导入它。查看 WTF 文档

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-20
      • 2012-07-14
      • 1970-01-01
      • 2023-03-14
      • 2013-05-15
      • 1970-01-01
      • 1970-01-01
      • 2017-11-09
      相关资源
      最近更新 更多