Daniel,

Thanks for your response. I should have included this information
earlier--but basically, the website I'm developing has a hierarchical
permission system which I had to implement myself via UserProfile
extension. So since User's must have a specific role (like an admin, a
manager, a salesperson, etc.), and Partyline objects can be owned by a
user, but also by their 'bosses', I had to write custom permission
handling stuff.

Due to the way it works, I can't do any sort of filter() or Q to grab
a list of Partylines that a given user owns (if I could I would!) So
I'm wondering how to make my list comprehension appear to be a normal
QuerySet I suppose.

If you're interested (or if you can see a better way to handle this),
here's my UserProfile class which extends the User class via profiles:
http://pastie.org/private/6cijfuuulcltvck7wcy0w

Basically the user hierarchy is:

admin
line manager
line owner
room owner

Thanks so much!

On Jul 2, 11:44 am, Daniel Roseman <[email protected]> wrote:
> On Jul 2, 6:53 pm, b14ck <[email protected]> wrote:
>
>
>
>
>
> > Hi everyone.
>
> > I'm working on a mid-sized web project, and have run into a bit of a
> > dead-end trying to figure out how to make my custom manager method
> > `for_user` return a a proper Django QuerySet.
>
> > First off, here's my: myproject/partylines/models.py source code which
> > contains the problem that I'm trying to figure 
> > out:http://pastie.org/private/zrqc0wklg4nwpmu8oce8aq
>
> > I'm attempting (in another part of my website) to render a form which
> > displays a dropdown of all Partyline objects that a given user owns.
> > My form looks like:http://pastie.org/private/mimiwo1vlafz5cxktn2gla
>
> > As you can see, the form accepts a custom parameter (user), and should
> > modify the queryset to show *only* Partyline objects that the
> > specified user owns. In the original paste which contains my manager
> > code, you'll see that I've overridden the default 'objects' manager
> > with my custom manager that has a single method, `for_user`, that
> > returns a list of Partylines that a user owns.
>
> > Basically, since my `for_user` manager method returns a list, and not
> > a QuerySet, the __init__ field in my `PartylineReportForm` class
> > doesn't work because it requires a QuerySet.
>
> > What I'm trying to figure out is, how can I modify my `for_user`
> > manager method to return a QuerySet instead of a list? I've been
> > googling this for hours, and haven't seen any examples or found any
> > documentation.
>
> > If anyone could help me out I would greatly appreciate it.
>
> > Thanks so much!
>
> The trouble is that you have used a Python list comprehension to
> filter the users in your manager, instead of using the ORM to
> translate into SQL commands to filter in the database. Not only is
> this incompatible with the modelform you want to use, it's also
> significantly less efficient - you will be getting every single User
> entry from the table, instantiating Django objects, then throwing them
> away. (In fact, because each call to is_owner does a separate call to
> user.get_profile, you'll be hitting the database multiple times for
> each User in your database).
>
> Instead, you need do this in a `filter()` call. I can't do the
> conversion myself because you haven't provided the code to your
> UserProfile and its is_creator method, but it looks like you're
> familiar with building up queries via Q objects, so you should be OK.
> --
> DR.

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" 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/django-users?hl=en.

Reply via email to