Merge remote-tracking branch 'origin/pr/254'

This commit is contained in:
Ross Lawley 2013-04-12 10:41:07 +00:00
commit 210b3e5192
3 changed files with 19 additions and 10 deletions

View File

@ -128,3 +128,4 @@ that much better:
* Peter Teichman
* Jakub Kot
* Jorge Bastida
* Aleksandr Sorokoumov

View File

@ -367,6 +367,10 @@ class QuerySet(object):
self._skip = None
self._hint = -1 # Using -1 as None is a valid value for hint
def __deepcopy__(self, memo):
"""Essential for chained queries with ReferenceFields involved"""
return self.clone()
def clone(self):
"""Creates a copy of the current :class:`~mongoengine.queryset.QuerySet`
@ -814,7 +818,6 @@ class QuerySet(object):
mongo_query['$and'].append(value)
else:
mongo_query['$and'] = value
return mongo_query
def get(self, *q_objs, **query):

View File

@ -232,28 +232,33 @@ class QuerySetTest(unittest.TestCase):
def test_chaining(self):
class A(Document):
pass
s = StringField()
class B(Document):
a = ReferenceField(A)
ref = ReferenceField(A)
boolfield = BooleanField(default=False)
A.drop_collection()
B.drop_collection()
a1 = A().save()
a2 = A().save()
a1 = A(s="test1").save()
a2 = A(s="test2").save()
B(a=a1).save()
B(ref=a1, boolfield=True).save()
# Works
q1 = B.objects.filter(a__in=[a1, a2], a=a1)._query
q1 = B.objects.filter(ref__in=[a1, a2], ref=a1)._query
# Doesn't work
q2 = B.objects.filter(a__in=[a1, a2])
q2 = q2.filter(a=a1)._query
q2 = B.objects.filter(ref__in=[a1, a2])
q2 = q2.filter(ref=a1)._query
self.assertEqual(q1, q2)
a_objects = A.objects(s='test1')
query = B.objects(ref__in=a_objects)
query = query.filter(boolfield=True)
self.assertEquals(query.count(), 1)
def test_update_write_options(self):
"""Test that passing write_options works"""