Skip to content

Commit 9c033f6

Browse files
author
Jan Schrewe
committed
Merge ‘pr/81’ from @m-vdb and @olivierlefloch Close jschrewe#81
2 parents 3759a48 + 0645b12 commit 9c033f6

File tree

3 files changed

+105
-72
lines changed

3 files changed

+105
-72
lines changed

mongodbforms/documentoptions.py

Lines changed: 39 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,13 @@
55
from django.db.models.fields import FieldDoesNotExist
66
from django.utils.text import capfirst
77
from django.utils.functional import LazyObject, new_method_proxy
8-
from django.conf import settings
98
try:
10-
from django.db.models.options import get_verbose_name
9+
# New in Django 1.7+
10+
from django.utils.text import camel_case_to_spaces
1111
except ImportError:
12-
from django.utils.text import camel_case_to_spaces as get_verbose_name
13-
12+
# Backwards compatibility
13+
from django.db.models.options import get_verbose_name as camel_case_to_spaces
14+
from django.conf import settings
1415
from mongoengine.fields import ReferenceField, ListField
1516

1617

@@ -23,7 +24,7 @@ def patch_document(function, instance, bound=True):
2324

2425

2526
def create_verbose_name(name):
26-
name = get_verbose_name(name)
27+
name = camel_case_to_spaces(name)
2728
name = name.replace('_', ' ')
2829
return name
2930

@@ -106,6 +107,7 @@ class DocumentMetaWrapper(MutableMapping):
106107
has_auto_field = False
107108
object_name = None
108109
proxy = []
110+
proxied_children = []
109111
parents = {}
110112
many_to_many = []
111113
_field_cache = None
@@ -152,12 +154,23 @@ def _setup_document_fields(self):
152154
if not hasattr(f, 'rel'):
153155
# need a bit more for actual reference fields here
154156
if isinstance(f, ReferenceField):
157+
# FIXME: Probably broken in Django 1.7
155158
f.rel = Relation(f.document_type)
156-
elif isinstance(f, ListField) and \
157-
isinstance(f.field, ReferenceField):
159+
f.is_relation = True
160+
elif isinstance(f, ListField) and isinstance(f.field, ReferenceField):
161+
# FIXME: Probably broken in Django 1.7
158162
f.field.rel = Relation(f.field.document_type)
163+
f.field.is_relation = True
159164
else:
165+
f.many_to_many = None
166+
f.many_to_one = None
167+
f.one_to_many = None
168+
f.one_to_one = None
169+
f.related_model = None
170+
171+
# FIXME: No longer used in Django 1.7?
160172
f.rel = None
173+
f.is_relation = False
161174
if not hasattr(f, 'verbose_name') or f.verbose_name is None:
162175
f.verbose_name = capfirst(create_verbose_name(f.name))
163176
if not hasattr(f, 'flatchoices'):
@@ -173,6 +186,8 @@ def _setup_document_fields(self):
173186
isinstance(f.document_type._meta, (DocumentMetaWrapper, LazyDocumentMetaWrapper)) and \
174187
self.document != f.document_type:
175188
f.document_type._meta = LazyDocumentMetaWrapper(f.document_type)
189+
if not hasattr(f, 'auto_created'):
190+
f.auto_created = False
176191

177192
def _init_pk(self):
178193
"""
@@ -188,14 +203,13 @@ def _init_pk(self):
188203
pk_field = None
189204
self.pk = PkWrapper(pk_field)
190205

191-
def _get_pk_val(self):
192-
return self._pk_val
206+
def _get_pk_val(obj):
207+
return obj.pk
208+
patch_document(_get_pk_val, self.document, False) # document is a class...
193209

194210
if pk_field is not None:
195211
self.pk.name = self.pk_name
196212
self.pk.attname = self.pk_name
197-
self.document._pk_val = pk_field
198-
patch_document(_get_pk_val, self.document)
199213
else:
200214
self.pk.fake = True
201215
# this is used in the admin and used to determine if the admin
@@ -206,8 +220,11 @@ def _get_pk_val(self):
206220
@property
207221
def app_label(self):
208222
if self._app_label is None:
209-
model_module = sys.modules[self.document.__module__]
210-
self._app_label = model_module.__name__.split('.')[-2]
223+
if self._meta.get('app_label'):
224+
self._app_label = self._meta["app_label"]
225+
else:
226+
model_module = sys.modules[self.document.__module__]
227+
self._app_label = model_module.__name__.split('.')[-2]
211228
return self._app_label
212229

213230
@property
@@ -269,6 +286,9 @@ def get_field(self, name, many_to_many=True):
269286
"""
270287
return self.get_field_by_name(name)[0]
271288

289+
def get_fields(self, include_hidden=False):
290+
return self.document._fields.values()
291+
272292
@property
273293
def swapped(self):
274294
"""
@@ -333,6 +353,12 @@ def __iter__(self):
333353
def __len__(self):
334354
return self._meta.__len__()
335355

356+
def __cmp__(self, other):
357+
return hash(self) == hash(other)
358+
359+
def __hash__(self):
360+
return id(self)
361+
336362
def get(self, key, default=None):
337363
try:
338364
return self.__getitem__(key)

0 commit comments

Comments
 (0)