#30721: Implicit related objects filtration because of the set Manager.
-----------------------------------------+------------------------
Reporter: ApaDoctor | Owner: nobody
Type: Bug | Status: new
Component: Uncategorized | Version: 2.2
Severity: Normal | Keywords:
Triage Stage: Unreviewed | Has patch: 0
Needs documentation: 0 | Needs tests: 0
Patch needs improvement: 0 | Easy pickings: 0
UI/UX: 0 |
-----------------------------------------+------------------------
When abstract model is defined with `objects` manager.
And its child-model defines another manager - RelatedManager uses defined
manager instead of objects.
{{{#!python
class SomeAbstractModel(models.Model):
class Meta:
abstract = True
objects = models.Manager()
class CustomManager(models.Manager):
def get_queryset(self):
return super().get_queryset().filter(some_field=True)
class SomeThing(SomeAbstractModel):
some_field = models.BooleanField()
parent = models.ForeignKey(
"SomeThing", related_name="children", on_delete=models.SET_NULL,
null=True
)
custom_objects = CustomManager()
}}}
So we have abstract model, which defines `objects` manager for the model.
Our model uses that abstract class.
I created some objects:
{{{#!python
SomeThing(some_field=True).save()
SomeThing.objects.bulk_create([SomeThing(some_field=bool(x%2),
parent_id=1) for x in range(0,6)])
}}}
After i reloaded shell i tried to make queries:
{{{#!python
>>> x = SomeThing.objects.get(id=1)
>>> x.children.count()
3
>>>SomeThing.objects.filter(parent_id=1).count()
6
}}}
Generated raw SQL for first query is:
{{{#!sql
SELECT COUNT(*) AS "__count" FROM "sapp_something" WHERE
("sapp_something"."some_field" = true AND "some_something"."parent_id" =
1)
}}}
--
Ticket URL: <https://code.djangoproject.com/ticket/30721>
Django <https://code.djangoproject.com/>
The Web framework for perfectionists with deadlines.
--
You received this message because you are subscribed to the Google Groups
"Django updates" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/052.79589af8490c3aeab7c3052e2f7e39b5%40djangoproject.com.