我有兩個單獨的文件,客戶和地址我的兩個類。地址將在其他地方使用,例如供應商具有地址。客戶類需要通過三種方式引用地址類。客戶有一個默認發貨地址(一對一)缺省帳單地址(一對一)和他的多個地址列表,如果不需要默認值,可以選擇。 ar.py文件和地址類中的客戶類位於global.py文件中。sqlalchemy - 多個文件 - 關係
一對一的工作,但一對多列表我無法弄清楚如何使它與兩個不同的文件中的類一起工作。無循環問題。
感謝您能提供任何見解......
globals.py
from erp.model import DeclarativeBase, metadata, DBSession
class Address(DeclarativeBase):
__tablename__ = 'addresses'
address_id = Column(Integer,primary_key=True)
name = Column(Unicode(100))
address_one = Column(Unicode(100))
address_two = Column(Unicode(100))
address_three = Column(Unicode(100))
city = Column(Unicode(100))
state = Column(Unicode(100))
zip_code = Column(Unicode(100))
phone = Column(Unicode(100))
fax = Column(Unicode(100))
contact = Column(Unicode(100))
ar.py ...
from erp.model.globals import Address
class Customer(DeclarativeBase):
__tablename__ = 'customers'
customer_id = Column(Integer, primary_key=True)
customer_name = Column(Unicode(100))
discount = Column(Float)
#bill_to_id = Column(Integer, ForeignKey('addresses.address_id'))
#bill_to = relation(Address,primaryjoin=bill_to_id==Address.address_id,uselist=False)
ship_to_id = Column(Integer, ForeignKey('addresses.address_id'))
ship_to = relation(Address,primaryjoin=ship_to_id==Address.address_id,uselist=False)
locations = relation(Address,backref="customer",primaryjoin='customers.customer_id'=='addresses.customer_id')
我可以使這項工作就好了,如果我在一個文件中所擁有的一切然而,這與上一個有一堆東西的項目佈局複雜文件或者更糟糕的是在ar文件和供應商文件中複製相同種類的地址佈局。
再次感謝您的幫助! Paul
太棒了。然而,這很有效(除非我錯了),我仍然需要在地址類上聲明一對多。因此,這個類將開始具有customer_id .. customer = relation ...,然後再有兩個供應商的條目,等等,以便需要使用這個類。更糟糕的是,隨着應用程序的增長,我希望使用這樣的地址,我必須修改地址。有沒有辦法在客戶課上做到這一切? – Ominus 2012-01-07 04:10:21
看看關係的'backref'參數,你可以在任何一個類上定義關係,它將通過backref應用到另一端。 – 2012-01-07 04:13:11
我明白了。爲了保持代碼清潔,我會更好地擁有一個繼承地址的customer_address類,並且只添加customer_id foreighnkey字段?這是我猜想的一個害蟲實踐問題。 – Ominus 2012-01-07 04:14:40