sqlalchemy の inspect 関数を使用して、特定のモデルの履歴を通常の値で見つけることができます。ただし、リレーションシップ (または関連する ForeignKey 列) の履歴を取得しようとすると、以前の値ではなく、新しい値のみが表示されます。
このような関係の以前の値を取得する簡単な方法はありますか、それとも別の関数を使用する必要がありますか?
私が使用している基本的なコードは次のようになります
class Person(db.Model):
id = db.Column(db.Integer(), primary_key=True)
name = db.Column(db.String(80))
phone_id = db.Column(db.Integer(), db.ForeignKey("phone_number.id"))
phone = db.relationship("PhoneNumber")
class PhoneNumber(db.Model):
id = db.Column(db.Integer(), primary_key = True)
type = db.Column(db.String(20))
number = db.Column(db.String(11))
p = Person()
p.name = "Frank"
phone1 = PhoneNumber("Mobile", "1234567890") #__init__ function handles these args
phone2 = PhoneNumber("Home", "9876543210")
p.phone = phone1
db.session.add_all([p, phone1, phone2])
db.session.commit()
p.phone = phone2
history = db.inspect(p).attrs.get("phone").history
# history is sqlalchemy.orm.attributes.History(([<PhoneNumber('Home', '9876543210')>], (), ()))
# history.added is ([<PhoneNumber('Home', '9876543210')>])
# history.deleted is () but should be ([<PhoneNumber('Mobile', '1234567890')>])