Flask sqlalchemy 如果贷记金额大于账户';平衡

Flask sqlalchemy 如果贷记金额大于账户';平衡,flask-sqlalchemy,flask-wtforms,validationerror,Flask Sqlalchemy,Flask Wtforms,Validationerror,我有一个名为Account的表,有两种方法(投资和取款),取款方法有问题。如果贷记金额大于帐户余额,我希望收到ValidationError消息 这是我的审判 def Withdraw(self): account = Accounts.query.filter_by(name=self.name).order_by(Account.id.desc()).first() if self.credit > account.balance:

我有一个名为Account的表,有两种方法(投资和取款),取款方法有问题。如果贷记金额大于帐户余额,我希望收到ValidationError消息

这是我的审判

def Withdraw(self):
        account = Accounts.query.filter_by(name=self.name).order_by(Account.id.desc()).first()
        if self.credit > account.balance:
            raise ValidationError('There is no enough balance in: '+ str(account.name)+ ' please try to Withdraw another account!')
        else:
            account_balance = float(float(account.balance) - float(self.credit))
            trans = Account(name=account.name, descrip=self.descrip, credit=self.credit,balance=account_balance)
            db.session.add(trans)
            db.session.commit()
我在代码下面得到了这个概念

def validate_email(self, email):
        user = User.query.filter_by(email=email.data).first()
        if user:
            raise ValidationError('This emaill is alrealy exist in our system please choose another email')

我希望这足以解释我的问题(请让我获得帮助):

表单验证是在验证表单时运行的一个特定(子类)函数

最好的做法是通过覆盖表单验证函数来钩住它:

class MyForm(FlaskForm):
    field1 = ..
    field2 = ..
    credit = ..

    def validate(self):
        """Overwrite the Base validation function"""
        rv = FlaskForm.validate(self)
        if not rv:
            return False

        # now custom validation code:
        account = Accounts.query.filter_by(name=self.name).order_by(Account.id.desc()).first()
        if self.credit > account.balance:
            self.credit.errors.append('There is not enough balance...')
            return False

        return True
如果返回True,则假设可以进行信用/借记操作,您可以自由继续应用程序,否则将产生验证错误

如果我是你,我会确保我的数据库表有一个约束,以确保你不能提交坏数据。数据库的完整性具有更高的优先级,尽管webform验证很好,但它不一定足以保持数据库的完整性