diff --git a/django/contrib/mongodb/compiler.py b/django/contrib/mongodb/compiler.py index 0d7f1f517c..d7a100eaef 100644 --- a/django/contrib/mongodb/compiler.py +++ b/django/contrib/mongodb/compiler.py @@ -45,6 +45,14 @@ class SQLCompiler(object): filters = self.get_filters(self.query.where) return self.connection.db[self.query.model._meta.db_table].find(filters) + def results_iter(self): + query = self.build_query() + for row in query: + yield tuple( + row[f.column if f is not self.query.model._meta.pk else "_id"] + for f in self.query.model._meta.fields + ) + def has_results(self): try: self.build_query()[0] @@ -62,4 +70,9 @@ class SQLInsertCompiler(SQLCompiler): ]) if self.query.model._meta.pk.column in values: values["_id"] = values.pop(self.query.model._meta.pk.column) + if "_id" in values and not values["_id"]: + del values["_id"] return self.connection.db[self.query.model._meta.db_table].insert(values) + +class SQLUpdateCompiler(SQLCompiler): + pass diff --git a/tests/regressiontests/mongodb/tests.py b/tests/regressiontests/mongodb/tests.py index 75a2dbf08b..3fd0ddde5c 100644 --- a/tests/regressiontests/mongodb/tests.py +++ b/tests/regressiontests/mongodb/tests.py @@ -9,6 +9,10 @@ class MongoTestCase(TestCase): self.assertTrue(b.pk is not None) self.assertEqual(b.name, "Bruce Springsteen") self.assertTrue(b.good) + b2 = Artist.objects.get(pk=b.pk) + self.assertEqual(b.pk, b2.pk) + self.assertEqual(b.name, b2.name) + self.assertEqual(b.good, b2.good) def test_update(self): l = Artist.objects.create(name="Lady Gaga", good=True) @@ -18,3 +22,6 @@ class MongoTestCase(TestCase): l.good = False l.save() self.assertEqual(l.pk, pk) + + l = Artist.objects.get(pk=pk) + self.assertTrue(not l.good)