2017-12-16 3 views
1

は、同じ人が、同じ名前の犬を持つことができないということですが、他の所有者にフラスコ関係、一意の列名は、私が欲しいもの

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']というアイデアは、ペットテーブルに同じ名前の3人のペットがいるかもしれないが、たとえば、同じ名前を人に付けた場合

pets_fran = ['name_pet_1'、 'name_pet_2'] < ---

pets_larson = [ 'name_pet_4'、 'name_pet5'、 'name_pet_4'] < ---あなたは同じ名前の2匹のペットを持っているので、これを拒否

pets_pedro = [ 'name_pet_1'、 'name_pet_6'、 'name_pet_7'

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'),)

をだから今あなたがこれを使用する場合:] < ---ペドロのマスコットとフランは、あなたがPetテーブルにUniqueConstraintを追加することができ、同じ名前を持っていますが、彼らは別の所有者

答えて

2

を持っているので、入院していますテーブルを構築するには、それを強制する(試行する)列全体のタプル(name、owner_id)は一意です。つまり、nameとowner_idの両方が同じである2つのエントリを追加することはできません。

関連する問題