When I combine two query sets I use the chain command. You might want to try
it.

Here is my code snippet

from itertools import chain
# Get current station configuration records
        stationlist =
StationConfig.objects.filter(StationId=result.StationId,
                StartDate__lte= result.ExecutionStartDate,
                EndDate__isnull=True)
        # Get old station configuration records that fall within date
        # range of test start date
        stationlist2 =
StationConfig.objects.filter(StationId=result.StationId,
                    StartDate__lte= result.ExecutionStartDate,
                    EndDate__gte= result.ExecutionStartDate)
        stationlist_total = list(chain(stationlist, stationlist2))
On Wed, Jul 7, 2010 at 9:10 AM, Tom Evans <tevans...@googlemail.com> wrote:

> Hi all
>
> I'm trying to combine two querysets, and having a difficult time
> explaining why one bit of code works, and why similar code doesn't.
> I'm probably doing something wrong..
>
> This is a customer management system:
> User objects are arranged into UserGroup objects, with a through table
> called UserUserGroupPreferences, which denote things about the User's
> membership of the UserGroup.
> UserGroup objects belong to a single Organization, and each
> Organization has exactly one UserGroup with is_catch_all_group=True.
>
> In simplified models, looks like this (User is django.contrib.auth.User)
>
> class UserUserGroupPreferences(models.Model):
>  usergroup = models.ForeignKey('UserGroup')
>  user = models.ForeignKey(User)
>  is_account_manager = models.BooleanField(default=False)
>
> class UserGroup(models.Model):
>  organization = models.ForeignKey('Organization')
>  users = models.ManyToManyField(User, through='UserUserGroupPreferences')
>  is_catch_all_group = models.BooleanField(default=False)
>
> I wish to find the groups for which a particular user is an account
> manager, or the catch all group in the same organization as a group of
> which the user is an account manager. I've come up with this bit of
> code, which works. However, I can't understand why the last line must
> be in that order.
>
> filt1 = Q(userusergrouppreferences__is_account_manager=True)\
>    & Q(userusergrouppreferences__user=request.user)
> filt2 = Q(is_catch_all_group=True)\
>    &
> Q(organization__usergroup__userusergrouppreferences__user=request.user)\
>    &
> Q(organization__usergroup__userusergrouppreferences__is_account_manager=True)
> qs1 = UserGroup.objects.filter(filt1).distinct()
> qs2 = UserGroup.objects.filter(filt2).distinct()
> # For some reason, this is not the same as qs1 | qs2 - answers on a
> postcard please.
> managed_groups = qs2 | qs1
>
> Any hints?
>
> Cheers
>
> Tom
>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-us...@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com<django-users%2bunsubscr...@googlegroups.com>
> .
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-us...@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to