gpt4 book ai didi

python - WTForms 验证绑定(bind)到模型验证

转载 作者:太空宇宙 更新时间:2023-11-03 18:37:47 26 4
gpt4 key购买 nike

models.py

class Invoice(Base, Timestampable):
__tablename__ = 'invoices'

issued_no = db.Column(
db.String(16),
nullable=False,
unique=True,
default=lambda: Invoice.next_issued_no()
)
issued_date = db.Column(db.DateTime, nullable=False)
exchange_rate = db.Column(db.Numeric(10, 2), nullable=False, default=1)
currency = db.Column(db.String(8), nullable=False, default='RON')
contract_id = db.Column(db.Integer, db.ForeignKey('contracts.id'))
contract = db.relationship('Contract')
customer_id = db.Column(db.Integer, db.ForeignKey('customers.id'))
customer = db.relationship('Customer')
due_date = db.Column(db.DateTime, nullable=False)
description = db.Column(db.String(255), nullable=True)
rows = db.relationship('InvoiceRow')

@classmethod
def next_issued_no(cls):
invoice = cls.query.with_entities(cls.issued_no) \
.order_by(desc(cls.issued_no)).first()
if not invoice:
return '100000'
return int(invoice.issued_no) + 1

forms.py

class InvoiceForm(Form):
issued_date = DateField(
'Issued Date',
[validators.Required('Required field')],
format='%d/%m/%Y'
)
exchange_rate = DecimalField(
'Exchange Rate',
[validators.Required('Required field')]
)
currency = SelectField(
'Currency',
[validators.Required('Required field')],
choices=[
('EUR', 'EUR'),
('USD', 'USD')
]
)
contract = QuerySelectField(
'Contract',
query_factory=lambda: InvoiceForm.get_contracts()
)
customer = QuerySelectField(
'Customer',
query_factory=lambda: InvoiceForm.get_customers()
)
due_date = DateField(
'Due',
[validators.Required('Required field')],
format='%d/%m/%Y'
)
description = TextAreaField(
'Description',
[validators.Optional()],
filters=[strip_filter]
)
rows = FieldList(
FormField(InvoiceRowForm),
label='Rows',
min_entries=1
)
//...

我必须根据自动生成的issued_no 验证Invoice.issued_date。 Issued_date 不能低于 Invoice.issued_no 较低的任何其他 Invoice.issued_date。

例如:

// valid
100001 01/04/2013
100002 01/05/2013
100003 01/06/2013

// invalid
100001 01/05/2013
100002 01/04/2013
100003 01/06/2013

我怎样才能做到这一点?

最佳答案

您可以将自定义验证器添加到您的 Form 类中。例如:

class InvoiceForm(Form):
# ...

def validate_issued_date(self, field):
last_invoice = Invoice.query.order_by(Invoice.issued_no.desc()).first()
if field.data < last_invoice.issued_date:
raise ValidationError('Invoice out of sequence')

关于python - WTForms 验证绑定(bind)到模型验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21215308/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com