根据WTForms上单独字段中的输入来验证StringField

问题描述 投票:0回答:1

我正在使用一种表格,用户可以通过该表格来管理企业的库存。具体来说,我希望能够在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个回答
0
投票

要在提交给服务器之前进行客户端验证,您将需要使用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文档

© www.soinside.com 2019 - 2024. All rights reserved.