基于另一个模型中的字段的peewee约束整数



我正在做一个模拟网店的作业,有一些用户、产品、标签和交易的模型。

class Product(peewee.Model):
description = peewee.CharField()
price_in_cents = peewee.IntegerField()
stock = peewee.IntegerField()
tags = peewee.ManyToManyField(Tag)
class Meta:
database = db
class Transaction(peewee.Model):
seller = peewee.ForeignKeyField(User)
buyer = peewee.ForeignKeyField(User)
product = peewee.ForeignKeyField(Product)
amount =peewee.IntegerField()

我已经通读了de documentation,但无法找到如何在Transaction中设置金额约束,使其不大于对应产品类的股票值,如果可能的话,如何告诉它卖方和买方不能相同。

对于提供涉及遍历连接的CHECK类型约束,数据库具有不同级别和类型的支持。我认为您想要的很可能是某种形式的CHECK约束,但具体如何实现将取决于您的数据库。或者,您可以使用pre-INSERT触发器进行查找,并在值无效时抛出错误,但是您可能还需要在产品表上使用相应的post-UPDATE钩子,以便在违反相关事务的约束时抛出错误。

Peewee CHECK约束文档:

  • http://docs.peewee-orm.com/en/latest/peewee/models.html single-column-indexes-and-constraints
  • <
  • http://docs.peewee-orm.com/en/latest/peewee/api.html字段/gh>
  • http://docs.peewee-orm.com/en/latest/peewee/api.html检查

基本单表检查示例:

class Transaction(Model):
amount = DecimalField(decimal_places=2, constraints=[Check('amount > 0')])

对于第二部分,您可以这样做:

seller = peewee.ForeignKeyField(User, constraints=[Check('seller_id != buyer_id')])
buyer = peewee.ForeignKeyField(User)

相关内容

  • 没有找到相关文章

最新更新