1
1
import sys
2
+ from collections import MutableMapping
2
3
3
4
from django .db .models .fields import FieldDoesNotExist
4
5
from django .db .models .options import get_verbose_name
@@ -20,7 +21,7 @@ def __setattr__(self, attr, value):
20
21
setattr (self .obj , attr , value )
21
22
super (PkWrapper , self ).__setattr__ (attr , value )
22
23
23
- class DocumentMetaWrapper (object ):
24
+ class DocumentMetaWrapper (MutableMapping ):
24
25
"""
25
26
Used to store mongoengine's _meta dict to make the document admin
26
27
as compatible as possible to django's meta class on models.
@@ -41,7 +42,7 @@ class DocumentMetaWrapper(object):
41
42
42
43
def __init__ (self , document ):
43
44
self .document = document
44
- self ._meta = document . _meta
45
+ self ._meta = getattr ( document , ' _meta' , {})
45
46
46
47
try :
47
48
self .object_name = self .document .__name__
@@ -191,6 +192,21 @@ def __setattr__(self, name, value):
191
192
def __getitem__ (self , key ):
192
193
return self ._meta [key ]
193
194
195
+ def __setitem__ (self , key , value ):
196
+ self ._meta [key ] = value
197
+
198
+ def __delitem__ (self , key ):
199
+ return self ._meta .__delitem__ (key )
200
+
201
+ def __contains__ (self , key ):
202
+ return key in self ._meta
203
+
204
+ def __iter__ (self ):
205
+ return self ._meta .__iter__ ()
206
+
207
+ def __len__ (self ):
208
+ return self ._meta .__len__ ()
209
+
194
210
def get (self , key , default = None ):
195
211
try :
196
212
return self .__getitem__ (key )
0 commit comments