Improved MapFields setting
This commit is contained in:
parent
5ab13518db
commit
bf6f03a412
@ -537,7 +537,11 @@ class MapField(BaseField):
|
|||||||
return dict( [(key,self.field.to_mongo(item)) for key,item in value.iteritems()] )
|
return dict( [(key,self.field.to_mongo(item)) for key,item in value.iteritems()] )
|
||||||
|
|
||||||
def prepare_query_value(self, op, value):
|
def prepare_query_value(self, op, value):
|
||||||
|
if op not in ('set', 'unset'):
|
||||||
return self.field.prepare_query_value(op, value)
|
return self.field.prepare_query_value(op, value)
|
||||||
|
for key in value:
|
||||||
|
value[key] = self.field.prepare_query_value(op, value[key])
|
||||||
|
return value
|
||||||
|
|
||||||
def lookup_member(self, member_name):
|
def lookup_member(self, member_name):
|
||||||
return self.field.lookup_member(member_name)
|
return self.field.lookup_member(member_name)
|
||||||
|
@ -261,6 +261,44 @@ class QuerySetTest(unittest.TestCase):
|
|||||||
|
|
||||||
Blog.drop_collection()
|
Blog.drop_collection()
|
||||||
|
|
||||||
|
def test_mapfield_update(self):
|
||||||
|
"""Ensure that the MapField can be updated."""
|
||||||
|
class Member(EmbeddedDocument):
|
||||||
|
gender = StringField()
|
||||||
|
age = IntField()
|
||||||
|
|
||||||
|
class Club(Document):
|
||||||
|
members = MapField(EmbeddedDocumentField(Member))
|
||||||
|
|
||||||
|
Club.drop_collection()
|
||||||
|
|
||||||
|
club = Club()
|
||||||
|
club.members['John'] = Member(gender="M", age=13)
|
||||||
|
club.save()
|
||||||
|
|
||||||
|
Club.objects().update(
|
||||||
|
set__members={"John": Member(gender="F", age=14)})
|
||||||
|
|
||||||
|
club = Club.objects().first()
|
||||||
|
self.assertEqual(club.members['John'].gender, "F")
|
||||||
|
self.assertEqual(club.members['John'].age, 14)
|
||||||
|
|
||||||
|
def test_dictfield_update(self):
|
||||||
|
"""Ensure that the MapField can be updated."""
|
||||||
|
class Club(Document):
|
||||||
|
members = DictField()
|
||||||
|
|
||||||
|
club = Club()
|
||||||
|
club.members['John'] = dict(gender="M", age=13)
|
||||||
|
club.save()
|
||||||
|
|
||||||
|
Club.objects().update(
|
||||||
|
set__members={"John": dict(gender="F", age=14)})
|
||||||
|
|
||||||
|
club = Club.objects().first()
|
||||||
|
self.assertEqual(club.members['John']['gender'], "F")
|
||||||
|
self.assertEqual(club.members['John']['age'], 14)
|
||||||
|
|
||||||
def test_get_or_create(self):
|
def test_get_or_create(self):
|
||||||
"""Ensure that ``get_or_create`` returns one result or creates a new
|
"""Ensure that ``get_or_create`` returns one result or creates a new
|
||||||
document.
|
document.
|
||||||
|
Loading…
x
Reference in New Issue
Block a user