-
-
Notifications
You must be signed in to change notification settings - Fork 284
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Related polymorphic query support inc select_related and prefetch_related #545
base: master
Are you sure you want to change the base?
Conversation
@pgammans Thanks, this seems to be very useful improvement. Also I thing part of this PR should be change of documentation to reflect this, e.g.: https://django-polymorphic.readthedocs.io/en/stable/advanced.html?highlight=select_related#restrictions-caveats |
5eb5e3e
to
89ea07b
Compare
implement support for a single query for select related base fetches across polymorphic models. adds a polymorphic QuerySet Mixin to enable non polymorphic models to fetch related models. fixes: jazzband#198 jazzband#436 jazzband#359 jazzband#244 possible fixes: jazzband#498: support for prefetch_related cannot fetch attributes not on all child models or via class names related: jazzband#531
94243ad
to
eae92aa
Compare
it will be really nice to have this. there seems to be some minor formatting issues in the latest commits. @pgammans would it be possible to fix them? |
Are you going to merge it one day? |
This pull request add support for select related and general related queries.
Summary
To take advantage of this it requires that the plain Django model either adds a custom query set manager and uses that for queries where it wants the related object to be transmogrify into the final polymorphic type of
that the default manager's queryset uses/ has PolymorphicQuerySetMixin or PolymorphicRelatedQuerySet as a base class
ie
class PlainModel(models.Model): objects = models.Manager.from_queryset(PolymorphicRelatedQuerySet)()
The default Django select_related can be used including which means this is simple to use from the Django admin.
Performance
When using select_related we archive fetch of the data in a single query including all information required to transmogrify the related object. This is an improvement from n+1 (main line) or models + 1 (with #531)
Notes
It has minimal support for prefetch_related cannot fetch attributes not on all child models or via class names this may fix #498
Fixes: #198 #436 #359 #244