У меня есть три таблицы
import enum
from sqlalchemy import Column, Enum, Float, String
from sqlalchemy.orm import relationship
@enum.unique
class TypeEnum(str, enum.Enum):
person = "person"
location = "location"
class Person(Base):
name = Column(String)
id = Column(Integer, primary_key=True)
class Location(Base):
id = Column(Integer, primary_key=True)
city = Column(String)
lat = Column(Float)
lon = Column(Float)
class ExternalIdentifier(Base):
name = Column(String)
id = Column(Integer, primary_key=True)
value = Column(String)
type = Column(Enum(TypeEnum))
# internal_id = relationship(...) # Problem here
Я хотел бы иметь сопоставление между ExternalIdentifier и Person / Location:
- Если
ExternalIdentifier.type
равно person
, тогда ExternalIdentifier.internal_id
должен относиться к объекту из таблицы Person
- Аналогично, если тип
location
К сожалению, мне удалось заставить его работать одним из следующих способов:
- создание полей
ExternalIdentifier.person_id/location_id
вместо ExternalIdentifier.internal_id/type
- или создание таблиц
person/location_to_external_identifier