【发布时间】:2017-06-02 01:31:18
【问题描述】:
我正在使用 Flask 构建一个应用,其中包含 Projects 和 Plates 的模型,其中 Plates 将 Project 作为外键。
每个项目都有一个年份,以整数形式给出(2017 年为 17);每个板块都有一个编号和一个名称,由 plate.project.year 和 plate.number 构成。例如,今年完成的项目中的板 106 将具有名称“17-0106”。我希望这个名字是独一无二的。
这是我的模型:
class Project(Model):
__tablename__ = 'projects'
id = Column(Integer, primary_key=True)
name = Column(String(64),unique=True)
year = Column(Integer,default=datetime.now().year-2000)
class Plate(Model):
__tablename__ = 'plates'
id = Column(Integer, primary_key=True)
number = Column(Integer)
project_id = Column(Integer, ForeignKey('projects.id'))
project = relationship('Project',backref=backref('plates',cascade='all, delete-orphan'))
@property
def name(self):
return str(self.project.year) + '-' + str(self.number).zfill(4)
我的第一个想法是使数字在具有相同 project.year 属性的板块中唯一,所以我尝试了变化
__table_args__ = (UniqueConstraint('project.year', 'number', name='_year_number_uc'),),但这需要访问另一个表。
有没有办法在数据库中做到这一点?或者,如果做不到这一点,可以使用 __init__ 方法来检查 number/project.year 组合或 name 属性的唯一性?
【问题讨论】:
标签: python flask sqlalchemy flask-sqlalchemy unique-constraint