Создание выражения гибридного свойства на основе отношения - PullRequest
0 голосов
/ 15 января 2020

У меня есть отношение c 1 к 1:

class DBALSequence(base.Base):
    __tablename__ = 'sequences'
    id = Column(Integer, primary_key=True)
    name = Column(String(255), nullable=False)

class DBALSequenceFormatter(base.Base):
    __tablename__ = 'sequence_formatters'
    id = Column(Integer, primary_key=True)
    sequence_id = Column(ForeignKey(DBALSequence.id), nullable=False)

И я выставляю последовательность name in DBALSequenceFormatter из отношения с hybrid_property:

class DBALSequenceFormatter(base.Base):
    [...]
    sequence = relationship(DBALSequence)

    @hybrid_property
    def sequence_name(self):
        return sequence.name

Теперь я бы хотел заказать DBALSequenceFormatter по sequence_name. Обычно я делал бы что-то вроде:

@sequence_name.expression
def sequence_name(cls):
    return select([DBALSequence.name]).where(DBALSequence.id == cls.id).label('sequence_name')

, которое работает просто отлично, но было бы лучше иметь возможность использовать отношения без необходимости переопределения выражения как alchemy запроса, например:

@sequence_name.expression
def sequence_name(cls):
    return cls.sequence.name

Очевидно, что это решение не работает, потому что sequence.name не является выражением.

Кто-нибудь знает, как лучше представить гибридное свойство?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...