Angenommen, ich modelliere postalische Adressenänderungen. Ich möchte, dass jede AddressChange
eine before
Beziehung zu einer Address
, sowie eine after
Beziehung zu einer anderen Address
hat. Und ich würde gerne eine Referenz zurück von der Address
zu der AddressChange
es zugeordnet ist.Zwei "eins-zu-eins" Verweise auf die gleiche Tabelle in SQLAlchemy
class AddressChange(Base):
__tablename__ = 'AddressChanges'
id = Column(Integer, primary_key=True)
before_id = Column(Integer, ForeignKey('Addresses.id'))
before = relationship('Address', foreign_keys=before_id, uselist=False,
back_populates='change')
after_id = Column(Integer, ForeignKey('Addresses.id'))
after = relationship('Address', foreign_keys=after_id, uselist=False,
back_populates='change')
class Address(Base):
__tablename__ = 'Addresses'
id = Column(Integer, primary_key=True)
street, city, etc = Column(String), Column(String), Column(String)
change = relationship('AddressChange')
jedoch SQLAlchemy klagt:
konnte nicht feststellen Zustand zwischen Eltern/Kind-Tabellen auf Beziehung Address.change beitreten - es gibt mehrere Fremdschlüssel Pfade die Tabellen zu verknüpfen. Geben Sie das Argument 'foreign_keys' an und geben Sie eine Liste der Spalten an, die gezählt werden sollen und die einen Fremdschlüsselbezug zur übergeordneten Tabelle enthalten.
Mein Address
nicht haben ein Fremdschlüssel Bezug auf die übergeordnete Tabelle, und es ist mir nicht klar, warum es eine brauchen sollte. Wenn ich eins hinzufüge, bekomme ich
Address.change und zurück-referenz AddressChange.before sind beide der gleichen Richtung Symbol ('MANYTOONE'). Hast du vor, remote_side auf der Viele-zu-Eins-Seite zu setzen?
Das wird verwirrend, weil die Dokumentation für remote_side
für "selbstreferenzielle Beziehungen" ist.
Ich habe' Viewonly = true' nach dem Debuggen mit Elmer im IRC. – rgov