我正在做一个模拟网店的作业,有一些用户、产品、标签和交易的模型。
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)