diff --git a/docs/changelog.rst b/docs/changelog.rst index f97ac418e..bfaeab77f 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -69,6 +69,7 @@ Changes in 1.0.0 - BugFix - Fix inc/dec atomic updates rejecting deltas outside a field's min_value/max_value #2339 - BugFix - Take `where()` into account when using `.modify()`, as in MyDocument.objects().where("this[field] >= this[otherfield]").modify(field='new') #2044 - BugFix: null embedded scalar values raises AttributeError #2896 +- Bug Fix - Allow ``select_related()`` to dereference documents whose custom queryset managers accept optional arguments #2889 Changes in 0.29.3 ================= diff --git a/mongoengine/dereference.py b/mongoengine/dereference.py index 548afeb9e..d670e2c3e 100644 --- a/mongoengine/dereference.py +++ b/mongoengine/dereference.py @@ -174,7 +174,7 @@ def _fetch_objects(self, doc_type=None): refs = [ dbref for dbref in dbrefs if (col_name, dbref) not in object_map ] - references = collection.objects.in_bulk(refs) + references = collection.objects().in_bulk(refs) for key, doc in references.items(): object_map[(col_name, key)] = doc else: # Generic reference: use the refs data to convert to document diff --git a/tests/queryset/test_queryset.py b/tests/queryset/test_queryset.py index 130eac35f..64bfcc76f 100644 --- a/tests/queryset/test_queryset.py +++ b/tests/queryset/test_queryset.py @@ -4067,6 +4067,28 @@ def objects(klass, queryset): assert 0 == Foo.objects.count() assert 1 == Bar.objects.count() + def test_select_related_when_referenced_has_custom_queryset_manager(self): + class Foo(Document): + @queryset_manager + def objects(klass, queryset, arg1=None, arg2=None, **kwargs): + return queryset(**kwargs) + + class Bar(Document): + foo = ReferenceField(Foo) + + Foo.drop_collection() + Bar.drop_collection() + + foo = Foo() + foo.save() + + Bar(foo=foo).save() + + Bar.objects().select_related() + + assert 1 == Foo.objects().count() + assert 1 == Bar.objects().count() + def test_query_value_conversion(self): """Ensure that query values are properly converted when necessary."""