#23076: Cascaded deletion of polymorphic models fails
-------------------------------------+-------------------------------------
Reporter: jernej@… | Owner: nobody
Type: Bug | Status: new
Component: Database layer | Version: master
(models, ORM) |
Severity: Normal | Resolution:
Keywords: | Triage Stage: Accepted
Has patch: 1 | Needs documentation: 0
Needs tests: 1 | Patch needs improvement: 0
Easy pickings: 0 | UI/UX: 0
-------------------------------------+-------------------------------------
Changes (by jmurty):
* status: closed => new
* resolution: wontfix =>
Comment:
Please consider re-opening this issue as it is related to Django core's
handling of proxy models in general, not just django-polymorphic.
The root cause of this issue is that Django's deletion collector does not
include M2M reverse references to '''proxy''' parents/ancestors of a model
when deleting it; it only finds these relationships for '''concrete'''
parent models. This means that deleting a proxy-based model object with
extant M2M relationships targeting a proxy parent will fail with integrity
errors, if you are using a database like PostgreSQL that enforces foreign
key constraints.
I have created a Pull Requests based on the current 1.7.x branch that adds
unit tests demonstrating the issue when run against PostgreSQL:
https://github.com/django/django/pull/5399
The same issue affects 1.8, and I can follow up with a PR for that branch
if it would be useful?
We have done some work investigating this issue and have the rough
beginnings of patches for the 1.7 and 1.8 branches, using a different
approach to the patches earlier in this ticket – namely, adjusting the
`get_deleted_objects` and related code path to find reverse M2M
relationships on proxy models.
We could proceed with these patches, but only if the issue is considered
relevant and serious enough to fix in Django core.
--
Ticket URL: <https://code.djangoproject.com/ticket/23076#comment:9>
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 post to this group, send email to [email protected].
To view this discussion on the web visit
https://groups.google.com/d/msgid/django-updates/071.efd2548808af8615c7dcdc8b189e303f%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.