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.

