Skip to content

Commit 4ef5fe3

Browse files
committed
Add custom resolve_model_init_order
1 parent 6991da4 commit 4ef5fe3

File tree

1 file changed

+20
-1
lines changed

1 file changed

+20
-1
lines changed

django_mongodb/query.py

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -360,6 +360,22 @@ def __init__(
360360
def iterator(self):
361361
yield from MongoRawModelIterable(self)
362362

363+
def resolve_model_init_order(self, columns):
364+
"""Resolve the init field names and value positions."""
365+
model_init_fields = [
366+
f for f in self.model._meta.fields if f.column in columns
367+
]
368+
annotation_fields = [
369+
(column, pos)
370+
for pos, column in enumerate(columns)
371+
if column not in self.model_fields
372+
]
373+
model_init_order = [
374+
columns.index(f.column) for f in model_init_fields
375+
]
376+
model_init_names = [f.attname for f in model_init_fields]
377+
return model_init_names, model_init_order, annotation_fields
378+
363379

364380
class MongoRawModelIterable(RawModelIterable):
365381
"""
@@ -373,13 +389,16 @@ def __iter__(self):
373389
connection = connections[db]
374390
compiler = connection.ops.compiler("SQLCompiler")(query, connection, db)
375391
query_iterator = self._make_result(query)
392+
# FIXME Get columns from first row of the query without iterating over
393+
# the query.
394+
columns = self.queryset.columns
376395

377396
try:
378397
(
379398
model_init_names,
380399
model_init_pos,
381400
annotation_fields,
382-
) = self.queryset.resolve_model_init_order()
401+
) = self.queryset.resolve_model_init_order(columns)
383402
model_cls = self.queryset.model
384403
if model_cls._meta.pk.attname not in model_init_names:
385404
raise FieldDoesNotExist(

0 commit comments

Comments
 (0)