Fix select_related for documents
This commit is contained in:
parent
8616c17700
commit
628a8dacfa
1 changed files with 4 additions and 0 deletions
|
|
@ -89,6 +89,8 @@ class DeReference(object):
|
||||||
v = getattr(item, field_name)
|
v = getattr(item, field_name)
|
||||||
if isinstance(v, (DBRef)):
|
if isinstance(v, (DBRef)):
|
||||||
reference_map.setdefault(field.document_type, []).append(v.id)
|
reference_map.setdefault(field.document_type, []).append(v.id)
|
||||||
|
elif isinstance(v, Document) and getattr(v, '_lazy', False):
|
||||||
|
reference_map.setdefault(field.document_type, []).append(v.pk)
|
||||||
elif isinstance(v, (dict, SON)) and '_ref' in v:
|
elif isinstance(v, (dict, SON)) and '_ref' in v:
|
||||||
reference_map.setdefault(get_document(v['_cls']), []).append(v['_ref'].id)
|
reference_map.setdefault(get_document(v['_cls']), []).append(v['_ref'].id)
|
||||||
elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth:
|
elif isinstance(v, (dict, list, tuple)) and depth <= self.max_depth:
|
||||||
|
|
@ -196,6 +198,8 @@ class DeReference(object):
|
||||||
v = data[k]._internal_data.get(field_name, None)
|
v = data[k]._internal_data.get(field_name, None)
|
||||||
if isinstance(v, (DBRef)):
|
if isinstance(v, (DBRef)):
|
||||||
data[k]._internal_data[field_name] = self.object_map.get(v.id, v)
|
data[k]._internal_data[field_name] = self.object_map.get(v.id, v)
|
||||||
|
elif isinstance(v, Document) and getattr(v, '_lazy', False):
|
||||||
|
data[k]._internal_data[field_name] = self.object_map.get(v.pk, v)
|
||||||
elif isinstance(v, (dict, SON)) and '_ref' in v:
|
elif isinstance(v, (dict, SON)) and '_ref' in v:
|
||||||
data[k]._internal_data[field_name] = self.object_map.get(v['_ref'].id, v)
|
data[k]._internal_data[field_name] = self.object_map.get(v['_ref'].id, v)
|
||||||
elif isinstance(v, dict) and depth <= self.max_depth:
|
elif isinstance(v, dict) and depth <= self.max_depth:
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue