Я пытаюсь использовать гибридный атрибут в качестве внешнего ключа. В моем классе Transaction
у меня есть следующий гибридный атрибут:
@hybrid_property
def target_id(self):
return self.data_manual.target_id or self.data_inferred.target_id
@target_id.expression
def target_id(cls):
coalesce(
select([TransactionManual.target_id]).where(cls.id == TransactionManual.id).as_scalar(),
select([TransactionInferred.target_id]).where(cls.id == TransactionInferred.id).as_scalar())
Если transaction_id
установлен автоматически, он сохраняется в таблице TransactionInferred
, и если он установлен вручную пользователем он хранится в таблице TransactionManual
(TransactionInferred
и TransactionManual
имеют тот же идентификатор, что и Transaction
). Ручное значение переопределяет автомат c один.
Как бы я тогда go о создании отношений?
Первоначально у меня был
@property
def target():
Target.query.filter(Target.id == self.target_id).first()
, который работает, но я не могу использовать его в запросах.
Я пробовал
target = db.relationship(Target, foreign_keys='Transaction.target_id', primaryjoin='Transaction.target_id == Target.id')
и десятки его вариантов, но ни один из них не работал. SQLAlchemy обычно жалуется на то, что нет никаких внешних ключей, связывающих таблицы.
Любая помощь будет высоко оценена, спасибо!