Come posso creare una relazione senza avere una chiave esterna?Definire la relazione senza chiave esterna
@declared_attr
def custom_stuff(cls):
joinstr = 'foreign(Custom.name) == "{name}"'.format(name=cls.__name__)
return db.relationship('Custom', primaryjoin=joinstr)
Questo genera un errore:
ArgumentError: Could not locate any simple equality expressions involving locally mapped foreign key columns for primary join condition
Questo funziona, ma penso che sia una bella brutto 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)
C'è un modo migliore per farlo?
EDIT: l'attributo in più deve essere aggiunto come @declared_attr
e deve utilizzare un rapporto, dal momento che il nostro serializer è scritto in modo che funziona con attrs declarred.
Fare questo con @hybrid_property
o qualcos'altro funzionerebbe, ma il nostro serializzatore json si romperebbe. Farlo funzionare sembra più difficile che definire una relazione.
Questo non fornisce una risposta alla domanda. – SaeX