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()] )
|
||||
|
||||
def prepare_query_value(self, op, value):
|
||||
if op not in ('set', 'unset'):
|
||||
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):
|
||||
return self.field.lookup_member(member_name)
|
||||
|
@ -261,6 +261,44 @@ class QuerySetTest(unittest.TestCase):
|
||||
|
||||
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):
|
||||
"""Ensure that ``get_or_create`` returns one result or creates a new
|
||||
document.
|
||||
|
Loading…
x
Reference in New Issue
Block a user