Fixed issue with custom queryset manager expecting explict variable names

If using / expecting kwargs you have to call the queryset manager
explicitly.
This commit is contained in:
Ross Lawley 2012-07-25 14:55:10 +01:00
parent 598ffd3e5c
commit 6459d4c0b6
3 changed files with 21 additions and 17 deletions

View File

@ -3,6 +3,10 @@ Changelog
========= =========
Changes in 0.6.17
=================
- Fixed issue with custom queryset manager expecting explict variable names
Changes in 0.6.16 Changes in 0.6.16
================= =================
- Fixed issue where db_alias wasn't inherited - Fixed issue where db_alias wasn't inherited

View File

@ -1882,9 +1882,9 @@ class QuerySetManager(object):
queryset = queryset_class(owner, owner._get_collection()) queryset = queryset_class(owner, owner._get_collection())
if self.get_queryset: if self.get_queryset:
var_names = self.get_queryset.func_code.co_varnames var_names = self.get_queryset.func_code.co_varnames
if var_names == ('queryset',): if len(var_names) == 1:
queryset = self.get_queryset(queryset) queryset = self.get_queryset(queryset)
elif var_names == ('doc_cls', 'queryset',): elif len(var_names) == 2:
queryset = self.get_queryset(owner, queryset) queryset = self.get_queryset(owner, queryset)
else: else:
queryset = partial(self.get_queryset, owner, queryset) queryset = partial(self.get_queryset, owner, queryset)

View File

@ -2228,28 +2228,28 @@ class QuerySetTest(unittest.TestCase):
date = DateTimeField(default=datetime.now) date = DateTimeField(default=datetime.now)
@queryset_manager @queryset_manager
def objects(doc_cls, queryset): def objects(cls, qryset):
return queryset(deleted=False) return qryset(deleted=False)
@queryset_manager @queryset_manager
def music_posts(doc_cls, queryset): def music_posts(doc_cls, queryset, deleted=False):
return queryset(tags='music', deleted=False).order_by('-date') return queryset(tags='music',
deleted=deleted).order_by('date')
BlogPost.drop_collection() BlogPost.drop_collection()
post1 = BlogPost(tags=['music', 'film']) post1 = BlogPost(tags=['music', 'film']).save()
post1.save() post2 = BlogPost(tags=['music']).save()
post2 = BlogPost(tags=['music']) post3 = BlogPost(tags=['film', 'actors']).save()
post2.save() post4 = BlogPost(tags=['film', 'actors', 'music'], deleted=True).save()
post3 = BlogPost(tags=['film', 'actors'])
post3.save()
post4 = BlogPost(tags=['film', 'actors'], deleted=True)
post4.save()
self.assertEqual([p.id for p in BlogPost.objects], self.assertEqual([p.id for p in BlogPost.objects()],
[post1.id, post2.id, post3.id]) [post1.id, post2.id, post3.id])
self.assertEqual([p.id for p in BlogPost.music_posts], self.assertEqual([p.id for p in BlogPost.music_posts()],
[post2.id, post1.id]) [post1.id, post2.id])
self.assertEqual([p.id for p in BlogPost.music_posts(True)],
[post4.id])
BlogPost.drop_collection() BlogPost.drop_collection()