Hello everyone!

I am reopening that because now I want to go an step further... And
I'm having troubles.

Let's say I have an Store class that has a relationship pointing to
UserGroup that has a relationship pointing to Users.

I'm trying to create a method getStoresByUserId(parameterUserId) that,
if I pass a numeric user id as a parameter, would give me a list of
the stores that said user "can see". I have modeled it like:

class Store(declarativeBase):
        __tablename__ = "stores"

        _name = Column("name", String(50))
                
        _userGroups = relationship("UserGroup", secondary=user_group_store,
order_by=lambda:UserGroup.name,
                primaryjoin=lambda: Store.id == user_group_store.c.store_id,
                secondaryjoin=lambda: UserGroup.id == 
user_group_store.c.user_group_id,
                collection_class=set
                )

class UserGroup(declarativeBase):
        __tablename__ = "user_groups"

        _name = Column("name", String(50))      
        #_users: Backref from User

class User(declarativeBase):
        __tablename__ = "users"

        _firstName = Column("first_name", String(50))
        _lastName = Column("last_name", String(50))
        _userName = Column("user_name", String(50), unique=True, nullable=False)
        _password = Column("password", String(64), nullable=False)

        _userGroupId = Column("user_group_id", Integer, 
ForeignKey("user_groups.id"))
        _userGroup = relationship("UserGroup", uselist=False,
                backref=backref("_users",
                        collection_class=set
                ))

So, in the method I want to create,
(getStoresByUserId(parameterUserId) or something like that) I
understand that I have to load the Store.userGroups, then load the
users of the UserGroup(s) and then check that that User.id ==
parameterId

I have tried:
query = query.select_from(join(Store.Store.userGroups,
UserGroup.UserGroup, UserGroup.UserGroup.users,
User.User).filter(User.User.id == int(parameterId)))

...and... erm... several other thousands of combinations like that...
Without luck. With that, I get:
AttributeError: Neither 'property' object nor 'function' object has an
attribute 'corresponding_column'

In some other cases I get "Store"s (instances) but they are not
properly filtered. It looks like it's getting all the stores assigned
to any userGroup, without filtering by the user id...

Now I'm kind of lost.

Thank you in advance!

2011/3/16 Hector Blanco <[email protected]>:
> Hello everyone!
>
> In my application I have a class "Store" that can contain several
> "UserGroup"s (for permission purposes) and one "UserGroup" can belong
> to several "Stores".
>
> I want to get the "Stores" that contain a certain "UserGroup" (instance):
>
> I have it modeled like this:
>
> class Store(declarativeBase):
>        __tablename__ = "stores"
>
>        _id = Column("id", Integer, primary_key=True)
>        _name = Column("name", String(50))
>        _number = Column("number", Integer)
>
>        _storeGroupId = Column("store_group_id", Integer,
> ForeignKey("store_groups.id"))
>
>
>        # _devices: Backref from Device
>
>        _userGroups = relationship("UserGroup", secondary=user_group_store,
> order_by=lambda:UserGroup.UserGroup.name,
>                primaryjoin=lambda: Store.id == user_group_store.c.store_id,
>                secondaryjoin=lambda: UserGroup.UserGroup.id ==
> user_group_store.c.user_group_id,
>                collection_class=set
>                )
>
> And:
>
> class UserGroup(declarativeBase):
>        __tablename__ = "user_groups"
>
>        _id = Column("id", Integer, primary_key=True)
>        _name = Column("name", String(50))
>        #_users: Backref from User
>
> I want to create a method (something like
> getStoresByUserGroup(userGroup) ) that accepts a userGroup instance
> (or id) and returns only the stores that contain that "userGroup".
>
> That should allow me to "hide" certain stores for certain user groups.
> The use case is: The user who is currently logged into my application
> will belong to a certain user group. If he wants to access the
> "stores" stored in the database, he will only see the ones that have
> that user's userGroup among the Store._userGroups set.
>
> I'm trying to join the Store with the UserGroup, but then I get:
> "Can't find any foreign key relationships between 'stores' and
> '%(175967212 user_groups)s
>
> I'm also trying to use alias, but without any luck so far.
>
> Do you have any idea, hint... Whatever. I'm kind of lost here. I keep
> trying things without knowing very well what I'm doing.
>
> Thank you in advance
>

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en.

Reply via email to