Как создать поле просмотра только в SqlAlchemy и GeoAlchemy2?

Я пытаюсь динамически заполнить поле, используя SqlAlchemy 0.8.4 и GeoAlchemy2 0.2.2. Цель состоит в том, чтобы назначить район для объекта на основе позиции объекта, когда он считывается из базы данных. Код выглядит так:

class District(Base):
    __tablename__ = 'districts'
    id = Column(Integer, primary_key=True)
    geom = Column('geog', Geometry(geometry_type='POLYGON'), nullable=False)

class Facility(Base):
    __tablename__ = 'facilities'
    id = Column(Integer, primary_key=True)
    pos = Column('geog', Geometry(geometry_type='POINT'), nullable=True)
    district = relationship(District,
                            viewonly=True,
                            primaryjoin="District.geom.ST_Contains(Facility.pos)",
                            foreign_keys=[District.id])

Но это дает мне следующую ошибку:

ArgumentError: Не удалось найти соответствующие столбцы внешнего ключа для условия первичного соединения 'ST_Contains(districts.geog, Facilities.geog)' в отношении Facility.district. Убедитесь, что ссылающиеся столбцы связаны с ForeignKey или ForeignKeyConstraint или помечены в условии соединения аннотацией foreign()

Мне бы очень хотелось, чтобы между этими классами не было отношения по иностранным ключам, поскольку районы постоянно меняются, но я хотел бы получить объект с набором округов, не запрашивая базу данных снова.

Как мне решить это?

0 ответов

Другие вопросы по тегам