Проверка StringField на основе ввода в отдельном поле в WTForms - PullRequest
0 голосов
/ 15 января 2020

Я работаю над формой, с помощью которой пользователь может управлять инвентаризацией бизнеса. В частности, я хочу иметь возможность добавлять определенное количество акций в 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})

1 Ответ

0 голосов
/ 16 января 2020

Чтобы пройти проверку на стороне клиента перед отправкой на сервер, вам нужно будет использовать 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

...