我想要的是同一个人不能拥有一个同名的狗,但如果其他所有者可能有同一个狗的名字
class Person(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20))
pets = db.relationship('Pet',backref='person',lazy='dynamic')
class Pet(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20),unique=True)
owner_id = db.Column(db.Integer,db.ForeignKey('person.id'))
例如在Person表中有这些名称['fran','larson','pedro'],其想法是在Pets表中可能有3只同名的宠物,但从不涉及多于一个与某人同名的宠物,例如
pets_fran = ['name_pet_1','name_pet_2']< --- correct
pets_larson = ['name_pet_4','name_pet5','name_pet_4']< ---拒绝这个,因为你有两只同名的宠物
pets_pedro = ['name_pet_1','name_pet_6','name_pet_7']< --- pedro和fran的吉祥物具有相同的名称但因为拥有不同的所有者而被录取
答案 0 :(得分:2)
您可以在Pet
表中添加UniqueConstraint
:
class Pet(db.Model):
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String(20),unique=True)
owner_id = db.Column(db.Integer,db.ForeignKey('person.id'))
__table_args__ = (db.UniqueConstraint('owner_id', 'name'),)
现在,如果您使用它来构造表,它将(尝试)强制整个列中的元组(name,owner_id)是唯一的。换句话说,无法添加name和owner_id相同的两个条目。