> -----Original Message-----
> From: sqlalchemy@googlegroups.com [mailto:sqlalchemy@googlegroups.com]
> On Behalf Of Joril
> Sent: 08 June 2011 22:41
> To: sqlalchemy
> Subject: [sqlalchemy] Filtered backref
> 
> Hi everyone!
> Is it possible to have a many-to-one declarative relation between two
> classes and a _filtered_ backref?
> 
> I'm trying to build a tagging system for my bloglike application, and
> to allow a user to apply private tags to posts of other people. My
> classes are:
> Owner
> Post
> TagAssociation
> Tag
> 
> A Post has an Owner, while TagAssociation has a Tag, a Post and an
> Onwer
> 
> Between TagAssociation and Post there's a many-to-one, and I'd like
> to
> configure a "tags" backref so that it would handle only the
> TagAssociations having the same Owner as the Post... Is this possible?
> 
> Many thanks!
> 

The 'relationship' function takes optional primaryjoin and secondaryjoin
parameters that control the join conditions for the relationship. So I
think you should be able to do something like this:

import sqlalchemy as sa

class TagAssociation(Base):
    # columns including "owner_id" and "post_id"

class Post(Base):
    # columns including "id" and "owner_id"
    tags = relationship(
        TagAssociation,
        primary_join=(sa.and_(id == TagAssociation.post_id,
                              owner_id == TagAssociation.owner_id)))

I think you would have to treat this relationship as readonly, so you
might need/want to add viewonly=True.

Hope that helps,

Simon

-- 
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.

Reply via email to