Merge fixes

This commit is contained in:
Ross Lawley 2013-04-17 14:27:33 +00:00
parent 51e50bf0a9
commit 420376d036
3 changed files with 22 additions and 10 deletions

View File

@ -30,7 +30,7 @@ class BaseDocument(object):
_dynamic_lock = True _dynamic_lock = True
_initialised = False _initialised = False
def __init__(self, __auto_convert=True, *args, **values): def __init__(self, *args, **values):
""" """
Initialise a document or embedded document Initialise a document or embedded document
@ -46,7 +46,7 @@ class BaseDocument(object):
if name in values: if name in values:
raise TypeError("Multiple values for keyword argument '" + name + "'") raise TypeError("Multiple values for keyword argument '" + name + "'")
values[name] = value values[name] = value
__auto_convert = values.pop("__auto_convert", True)
signals.pre_init.send(self.__class__, document=self, values=values) signals.pre_init.send(self.__class__, document=self, values=values)
self._data = {} self._data = {}

View File

@ -1138,8 +1138,13 @@ class QuerySet(object):
if self._hint != -1: if self._hint != -1:
self._cursor_obj.hint(self._hint) self._cursor_obj.hint(self._hint)
return self._cursor_obj return self._cursor_obj
def __deepcopy__(self, memo):
"""Essential for chained queries with ReferenceFields involved"""
return self.clone()
@property @property
def _query(self): def _query(self):
if self._mongo_query is None: if self._mongo_query is None:
@ -1302,6 +1307,9 @@ class QuerySet(object):
except: except:
pass pass
key_list.append((key, direction)) key_list.append((key, direction))
if self._cursor_obj:
self._cursor_obj.sort(key_list)
return key_list return key_list
def _get_scalar(self, doc): def _get_scalar(self, doc):

View File

@ -249,6 +249,10 @@ class QuerySetTest(unittest.TestCase):
self.assertEqual(list(A.objects.none()), []) self.assertEqual(list(A.objects.none()), [])
self.assertEqual(list(A.objects.none().all()), []) self.assertEqual(list(A.objects.none().all()), [])
def test_chaining(self):
class A(Document):
s = StringField()
class B(Document): class B(Document):
ref = ReferenceField(A) ref = ReferenceField(A)
boolfield = BooleanField(default=False) boolfield = BooleanField(default=False)
@ -282,7 +286,7 @@ class QuerySetTest(unittest.TestCase):
write_options = {"fsync": True} write_options = {"fsync": True}
author, created = self.Person.objects.get_or_create( author, created = self.Person.objects.get_or_create(
name='Test User', write_options=write_options) name='Test User', write_options=write_options)
author.save(write_options=write_options) author.save(write_options=write_options)
self.Person.objects.update(set__name='Ross', self.Person.objects.update(set__name='Ross',
@ -1475,7 +1479,6 @@ class QuerySetTest(unittest.TestCase):
BlogPost.drop_collection() BlogPost.drop_collection()
def test_set_list_embedded_documents(self): def test_set_list_embedded_documents(self):
class Author(EmbeddedDocument): class Author(EmbeddedDocument):
@ -1533,11 +1536,11 @@ class QuerySetTest(unittest.TestCase):
BlogPost.drop_collection() BlogPost.drop_collection()
blog_post_3 = BlogPost(title="Blog Post #3", blog_post_3 = BlogPost(title="Blog Post #3",
published_date=datetime(2010, 1, 6, 0, 0 ,0)) published_date=datetime(2010, 1, 6, 0, 0, 0))
blog_post_2 = BlogPost(title="Blog Post #2", blog_post_2 = BlogPost(title="Blog Post #2",
published_date=datetime(2010, 1, 5, 0, 0 ,0)) published_date=datetime(2010, 1, 5, 0, 0, 0))
blog_post_4 = BlogPost(title="Blog Post #4", blog_post_4 = BlogPost(title="Blog Post #4",
published_date=datetime(2010, 1, 7, 0, 0 ,0)) published_date=datetime(2010, 1, 7, 0, 0, 0))
blog_post_1 = BlogPost(title="Blog Post #1", published_date=None) blog_post_1 = BlogPost(title="Blog Post #1", published_date=None)
blog_post_3.save() blog_post_3.save()
@ -1563,11 +1566,11 @@ class QuerySetTest(unittest.TestCase):
BlogPost.drop_collection() BlogPost.drop_collection()
blog_post_1 = BlogPost(title="A", blog_post_1 = BlogPost(title="A",
published_date=datetime(2010, 1, 6, 0, 0 ,0)) published_date=datetime(2010, 1, 6, 0, 0, 0))
blog_post_2 = BlogPost(title="B", blog_post_2 = BlogPost(title="B",
published_date=datetime(2010, 1, 6, 0, 0 ,0)) published_date=datetime(2010, 1, 6, 0, 0, 0))
blog_post_3 = BlogPost(title="C", blog_post_3 = BlogPost(title="C",
published_date=datetime(2010, 1, 7, 0, 0 ,0)) published_date=datetime(2010, 1, 7, 0, 0, 0))
blog_post_2.save() blog_post_2.save()
blog_post_3.save() blog_post_3.save()
@ -1604,6 +1607,7 @@ class QuerySetTest(unittest.TestCase):
qs = self.Person.objects.all().limit(10) qs = self.Person.objects.all().limit(10)
qs = qs.order_by('-age') qs = qs.order_by('-age')
ages = [p.age for p in qs] ages = [p.age for p in qs]
self.assertEqual(ages, [40, 30, 20]) self.assertEqual(ages, [40, 30, 20])