fix-#914: ListField of embedded docs doesn't set the _instance attribute when iterating over it
This commit is contained in:
parent
1001f1bd36
commit
bb77838b3e
@ -5,6 +5,7 @@ Changelog
|
|||||||
|
|
||||||
Changes in 0.9.X - DEV
|
Changes in 0.9.X - DEV
|
||||||
======================
|
======================
|
||||||
|
- ListField of embedded docs doesn't set the _instance attribute when iterating over it #914
|
||||||
- Support += and *= for ListField #595
|
- Support += and *= for ListField #595
|
||||||
|
|
||||||
Changes in 0.9.0
|
Changes in 0.9.0
|
||||||
|
@ -125,6 +125,10 @@ class BaseList(list):
|
|||||||
value._instance = self._instance
|
value._instance = self._instance
|
||||||
return value
|
return value
|
||||||
|
|
||||||
|
def __iter__(self):
|
||||||
|
for i in xrange(self.__len__()):
|
||||||
|
yield self[i]
|
||||||
|
|
||||||
def __setitem__(self, key, value, *args, **kwargs):
|
def __setitem__(self, key, value, *args, **kwargs):
|
||||||
if isinstance(key, slice):
|
if isinstance(key, slice):
|
||||||
self._mark_as_changed()
|
self._mark_as_changed()
|
||||||
|
@ -2799,5 +2799,21 @@ class InstanceTest(unittest.TestCase):
|
|||||||
self.assertNotEqual(p, p1)
|
self.assertNotEqual(p, p1)
|
||||||
self.assertEqual(p, p)
|
self.assertEqual(p, p)
|
||||||
|
|
||||||
|
def test_list_iter(self):
|
||||||
|
# 914
|
||||||
|
class B(EmbeddedDocument):
|
||||||
|
v = StringField()
|
||||||
|
|
||||||
|
class A(Document):
|
||||||
|
l = ListField(EmbeddedDocumentField(B))
|
||||||
|
|
||||||
|
A.objects.delete()
|
||||||
|
A(l=[B(v='1'), B(v='2'), B(v='3')]).save()
|
||||||
|
a = A.objects.get()
|
||||||
|
self.assertEqual(a.l._instance, a)
|
||||||
|
for idx, b in enumerate(a.l):
|
||||||
|
self.assertEqual(b._instance, a)
|
||||||
|
self.assertEqual(idx, 2)
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
unittest.main()
|
unittest.main()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user