のは、私は次のモデルがあるとしましょう:SqlAlchemy関係に基づいてモデルのデフォルトを設定するにはどうすればよいですか?
class Customer(Model):
__tablename__ = 'customer'
id = Column(Integer())
treatments = relationship('Treatment', back_populates='customer')
shipments = relationship('Shipment', back_populates='customer')
class Treatment(Model):
__tablename__ = 'treatment'
customer_id = Column(Integer(), ForeignKey('customer.id'))
customer = relationship('Customer', back_populates='treatments')
treatment_date = Column(DateTime(), nullable=False)
class Shipment(Model):
__tablename__ = 'shipment'
customer_id = Column(Integer(), ForeignKey('customer.id'))
customer = relationship('Customer', back_populates='shipments')
ship_date = Column(DateTime(), nullable=False)
私はTreatment.treatment_date前日であることをShipment.ship_dateをデフォルトにできるようにしたいと思います。言い換えれば、私は次の操作を実行したい:
customer = Customer()
treatment = Treatment(treatment_date="11/02/2017")
customer.treatments.append(treatment)
shipment = Shipment()
customer.shipments.append(shipment)
shipment.ship_date
# 11/01/2017
彼らはappend
のような方法で動的に設定しているとき、私は関係に基づいてデフォルト値を設定するにはどうすればよいですか?
明確にするために、これはSqlAlchemyとリレーションシップが設定されているときの質問です。
class Shipment(Model):
# ...same set up as above
def __init__(self, **kwargs):
super().__init__(**kwargs)
self.ship_date = self.customer.treatments[0].treatment_date - timedelta(1)
をしかし、SQLAlchemyのはまだself.customer
フィールドを設定していないので、それは例外TypeError:たとえば、私は次のことを試してみました。
顧客は多くの治療(および多くの出荷)を行うことができるため、どの治療を出荷日から受け取るかはどのように決定しましたか? –
実際には、treatment_dateに基づいて最も早い処理を使用します。ここでは単純化のためにインデックス0を使用するようにコードを変更しました。 – maherio