2007/5/15, Oleg Broytmann <phd@phd.pp.ru>:
> And if so, is there another way to do this?

   Do it SQL-wise. Recreate and declare the intermediate table, and do a
join.

Ok, I figured out the join I need to do, and I declared the intermediate table like this:
class Photo(SQLObject):
   [...]
    keywords = RelatedJoin("Keyword",otherColumn="keyword_id",
                                        joinColumn="photo_id",
                                        intermediateTable="keyword_photo")
class Keyword(SQLObject):
    keyword = StringCol(alternateID=True)
    photos = RelatedJoin("Photo", joinColumn="keyword_id",
                                           otherColumn="photo_id",
                                           intermediateTable="keyword_photo")

Is that correct? If so, how do I access the intermediateTable? Because:

>>> Photo.select(LEFTJOINOn(None,keyword_photo, Photo.id == keyword_photo.photo_id))

gives me:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
NameError: name 'keyword_photo' is not defined

??

> Another question bubbles up. Is there a way to create a dict out of a
> SelectResult?

   Starting with 0.8 SQLObject.sqlmeta has a method .asDict().
> Or a JSONifiable object?

   No, that's completely outside of the scope of SQLObject.

I understand. I meant a simple object that I could pass to a function that converts it to JSON. But asDict() does the trick. I should be mentioned in the docs I think. Quite a valueable method..