Hi, I can't find what I am doing wrong here. The relevant parts of code:
news = Table('news', dbmeta, autoload=True) news_query = select(columns=[news], whereclause=or_(news.c.blog == None, news.c.blog == False)) mapper(News, news_query, properties={ 'roles':relation(Role, secondary=news_roles, backref='news'), 'author':relation(User, lazy=False), 'comments':relation(Comment), 'approved_comments':relation(Comment, primaryjoin=and_(news.c.id == comments.c.news_id, comments.c.status == 'approved'), foreign_keys=[comments.c.news_id], viewonly=True, remote_side=[news.c.id], ) }, primary_key=[news.c.id]) When I try to access "approved_comments" property (e.g. "print len (record.approved_comments)") it breaks: [...] Module layouts_default_html:337 in render_news_item view Module sqlalchemy.orm.dynamic:167 in __iter__ view >> return iter(self._clone(sess)) Module sqlalchemy.orm.query:1287 in __iter__ view >> return self._execute_and_instances(context) Module sqlalchemy.orm.query:1290 in _execute_and_instances view >> result = self.session.execute(querycontext.statement, params=self._params, >> mapper=self._mapper_zero_or_none()) Module sqlalchemy.orm.session:755 in execute view >> clause, params or {}) Module sqlalchemy.engine.base:1281 in execute view >> return proxy.execute(self, super(ProxyConnection, self).execute, object, >> *multiparams, **params) Module sqlalchemy.interfaces:137 in execute view >> return execute(clauseelement, *multiparams, **params) Module sqlalchemy.engine.base:824 in execute view >> return Connection.executors[c](self, object, multiparams, params) Module sqlalchemy.engine.base:872 in _execute_clauseelement view >> parameters=params Module sqlalchemy.engine.base:938 in __create_execution_context view >> return dialect.execution_ctx_cls(dialect, connection=self, **kwargs) Module sqlalchemy.engine.default:166 in __init__ view >> self.compiled_parameters = [compiled.construct_params(m) for m in >> parameters] Module sqlalchemy.sql.compiler:225 in construct_params view >> pd[self.bind_names[bindparam]] = bindparam.value() Module sqlalchemy.orm.strategies:404 in <lambda> view >> bindparam.value = lambda: mapper._get_committed_attr_by_column(o, >> bind_to_col[bindparam.key]) Module sqlalchemy.orm.mapper:1088 in _get_committed_attr_by_column view >> return self._get_committed_state_attr_by_column(state, column) Module sqlalchemy.orm.mapper:1091 in _get_committed_state_attr_by_column view >> return self._get_col_to_prop(column).getcommitted(state, column, >> passive=passive) Module sqlalchemy.orm.mapper:1077 in _get_col_to_prop view >> raise exc.UnmappedColumnError("No column %s is configured on mapper %s..." >> % (column, self)) UnmappedColumnError: No column comments.news_id is configured on mapper Mapper|News|%(25629424 anon)s... When I add "lazy=False" to the relation definition, the error comes from the database itself (I think): ProgrammingError: (ProgrammingError) invalid reference to FROM-clause entry for table "comments" LINE 7: ...JOIN comments AS comments_1 ON anon_1.anon_2_id = comments.n... ^ HINT: Perhaps you meant to reference the table alias "comments_1". Thanks Ksenia --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---