KeyError from query.combine() when merging 2 QuerySets; bug or what?

9 views
Skip to first unread message

omat

unread,
May 23, 2008, 12:59:49 PM5/23/08
to Django users
I am trying to merge 2 QuerySet objects with the following function:

qs_user = queryset.filter(user=user)
qs_favorites = Favorite.objects.get_by_user(queryset.model, user)
combined = qs_user | qs_favorites

But I get:
"KeyError: 'favorites_favorite'"
raised from the depths of db-api (query.py line 321 svn version 7547):

"get_by_user" method of the Favorite manager returns a QuerySet
holding objects marked as favorite by the given user:

class FavoriteManager(models.Manager):
def get_by_user(self, Model, user):
ctype = ContentType.objects.get_for_model(Model)
rel_table = qn(self.model._meta.db_table)
return Model._default_manager.extra(
tables=[self.model._meta.db_table], # Use a non-explicit
join
where=[
'%s.content_type_id = %%s' % rel_table,
'%s.user_id = %%s' % rel_table,
'%s.%s = %s.object_id' % (qn(Model._meta.db_table),
qn(Model._meta.pk.column),
rel_table)
],
params=[ctype.id, user.id],
)


And 'favorites_favorite' is the table name as returned by
"Model._meta.db_table"

The line:
promote = (rhs.alias_map[alias][JOIN_TYPE] == self.LOUTER)

raises thi exception as "rhs.alias_map" does not contain the key
'favorites_favorite'


This seems like a bug to me. Any ideas?


--
omat

omat

unread,
May 24, 2008, 4:21:10 AM5/24/08
to Django users
Not sure but this can be related to ticket #7277:
http://code.djangoproject.com/ticket/7277
Reply all
Reply to author
Forward
0 new messages