Skip to content

Commit acb9a34

Browse files
committed
edits
1 parent d0d93a9 commit acb9a34

File tree

3 files changed

+21
-25
lines changed

3 files changed

+21
-25
lines changed

django_mongodb_backend/queryset.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -93,4 +93,4 @@ def _make_result(self, query):
9393
of __iter__().
9494
"""
9595
for result in query:
96-
yield tuple(result.get(key, None) for key in self.queryset.columns)
96+
yield tuple(result.get(key) for key in self.queryset.columns)

docs/source/releases/5.1.x.rst

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ Django MongoDB Backend 5.1.x
88
*Unreleased*
99

1010
- Added support for :doc:`database caching </topics/cache>`.
11+
- Fixed ``QuerySet.raw_aggregate()`` field initialization when the document key
12+
order doesn't match the order of the model's fields.
1113

1214
5.1.0 beta 1
1315
============

tests/raw_query_/test_raw_aggregate.py

Lines changed: 18 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22
These tests are adapted from Django's tests/raw_query/tests.py.
33
"""
44

5-
from datetime import date
5+
from datetime import date, datetime
66

7-
from django.db import connection
87
from django.core.exceptions import FieldDoesNotExist
8+
from django.db import connection
99
from django.test import TestCase
1010

1111
from django_mongodb_backend.queryset import RawQuerySet
@@ -171,29 +171,23 @@ def test_order_handler(self):
171171
authors = Author.objects.all()
172172
self.assertSuccessfulRawQuery(Author, query, authors)
173173

174-
def test_different_ordered_in_database(self):
175-
"""Documents in MongoDB are not required to maintain key order as
176-
a means to improve write efficiency. Documents can be returned
177-
to Django out of order. This can lead to incorrect information being placed
178-
in a RawQueryset object.
174+
def test_different_db_key_order(self):
179175
"""
180-
database = connection["<TEST_DATABASE>"].database
181-
raw_insert = Author(first_name="Out of", last_name="Order", dob=date(1950, 9, 20))
182-
try:
183-
# Insert a document into the database in reverse
184-
database[Author._meta.db_table].insert_one(
185-
{
186-
field.name: getattr(field.name, raw_insert)
187-
for field in reversed(Author._meta.get_fields())
188-
}
189-
)
190-
query = []
191-
authors = Author.objects.all()
192-
self.assertSuccessfulRawQuery(Author, query, authors)
193-
finally:
194-
database[Author._meta.db_table].delete_one(
195-
{"first_name": raw_insert.first_name, "last_name": raw_insert.last_name}
196-
)
176+
A raw query correctly associates document keys to model fields when the
177+
document key order is different than the order of model fields.
178+
"""
179+
db = connection.database
180+
author = Author(first_name="Out of", last_name="Order", dob=datetime(1950, 9, 20))
181+
# Insert a document with the keys reversd.
182+
db.get_collection(Author._meta.db_table).insert_one(
183+
{
184+
field.name: getattr(author, field.name)
185+
for field in reversed(Author._meta.concrete_fields)
186+
}
187+
)
188+
query = []
189+
authors = Author.objects.all()
190+
self.assertSuccessfulRawQuery(Author, query, authors)
197191

198192
def test_query_representation(self):
199193
"""Test representation of raw query."""

0 commit comments

Comments
 (0)