Jak mogę nawiązać związek bez obcego klucza?Definiowanie relacji bez klucza obcego
@declared_attr
def custom_stuff(cls):
joinstr = 'foreign(Custom.name) == "{name}"'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)
Rodzi błąd:
ArgumentError: Could not locate any simple equality expressions involving locally mapped foreign key columns for primary join condition
To działa, ale myślę, że to dość brzydki Hack.
@declared_attr
def custom_stuff(cls):
joinstr = 'or_(
and_(foreign(Custom.name) == MyTable.title,
foreign(Custom.name) != MyTable.title),
foreign(Custom.name) == "{name}")'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)
Czy jest lepszy sposób to zrobić?
EDIT: potrzebuje dodatkowy atrybut zostać dodany jako @declared_attr
i musi użyć relacji, ponieważ nasza serializer jest napisany tak, że współpracuje z declarred attrs.
Robiąc to z @hybrid_property
lub czymś innym by działało, ale wtedy nasz seriser json mógłby się zepsuć. Przygotowanie do pracy wydaje się trudniejsze niż zdefiniowanie związku.
To nie daje odpowiedzi na pytanie. – SaeX