我正在做一个模拟网上商店的作业,并有一些模型的用户,产品,标签和交易。
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文档,但无法找到如何在交易中设置金额约束,使其不能大于对应于产品类的股票价值,以及如果可能的话,如何告诉它卖方和买方不能相同。
1条答案
按热度按时间x3naxklr1#
数据库对提供
CHECK
类型约束(涉及到遍历连接)的支持有不同的级别和类型。我认为您需要的可能是某种形式的CHECK
约束,但如何准确地实现这一点将取决于您的数据库。或者,您可以使用pre-INSERT触发器,该触发器执行查找并在值无效时引发错误。但您可能还需要在product表上使用一个相应的post-UPDATE钩子,以便在它违反相关事务的约束时也引发错误。Peewee CHECK约束文档:
基本单表检查示例:
对于第二部分,您可以执行以下操作: