On 08/30/2016 01:54 PM, TomS. wrote:
Hi, I would like to create an abstract model which should be inherited. Unfortunately, I am not allowed to used Foreign Keys, this is the reason why I introduced work around via relationship. Here is the whole code: class DepTest(db.Model): __tablename__ = u'deptest' __bind_key__ = u'section' department_pk_id = db.Column(db.Integer, primary_key=True) department_id = db.Column(db.Integer) department_name = db.Column(db.String(1000)) class PPLTest(db.Model): __abstract__ = True person_pk_id = db.Column(db.Integer, primary_key=True) person_name = db.Column(db.String(1000)) person_surname = db.Column(db.String(1000)) department_id = db.Column(db.Integer) @hybrid_property def person_name_surname(self): return self.person_name + u' ' + self.person_surname class Level1(PPLTest): __tablename__ = u'ppl_level1' __bind_key__ = u'section' department = relationship( DepTest, primaryjoin=remote(DepTest.department_id) == foreign( PPLTest.department_id)) But I get "Cannot compile Column object until its 'name' is assigned." So I defined department (in Level1) using @declared_attr: def department(clss): return relationship(DepTest, primaryjoin=lambda: remote(DepTest.department_id) == foreign( clss.department_id) ) and now it works as expected. The question is - is it defined properly, or I should be aware of sth?
Yes, using a lambda here, or alternatively using a string-eval, is a good way to defer evaluation of that primaryjoin until declarative has set things up and put names in your Column objects.
Just curious to see the stack trace here because I don't see where the Column needs to actually be compiled into a string.
Thank you for any suggestions! Cheers
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at https://groups.google.com/group/sqlalchemy. For more options, visit https://groups.google.com/d/optout.