#27407: The delete(keep_parents=True) option should preserve parent reverse
relationships.
-------------------------------------+-------------------------------------
               Reporter:  Simon      |          Owner:  nobody
  Charette                           |
                   Type:  Bug        |         Status:  new
              Component:  Database   |        Version:  master
  layer (models, ORM)                |
               Severity:  Normal     |       Keywords:
           Triage Stage:             |      Has patch:  0
  Unreviewed                         |
    Needs documentation:  0          |    Needs tests:  0
Patch needs improvement:  0          |  Easy pickings:  0
                  UI/UX:  0          |
-------------------------------------+-------------------------------------
 The `keep_parent` option of `Model.delete()` is
 
[https://docs.djangoproject.com/en/1.10/ref/models/instances/#django.db.models.Model.delete
 documented to keep the parent model’s data] but actually only preserves
 the child-parent relationship and will discard the parent reverse
 relationships which can lead to unexpected data loss.

 {{{#!python
 class Place(models.Model):
     pass

 class Restaurant(Place):
     pass

 class Event(models.Model):
     location = models.ForeignKey(Place, related_name='events')

 >> restaurant = Restaurant.objects.create()
 >> place = restaurant.parent_ptr
 >> Events.objects.create(location=place)
 >> place.events.count()
 1
 >> restaurant.delete(keep_parents=True)
 >> place.events.count()
 0
 }}}

 I believe that users of the `keep_parents` option would expect
 relationships pointing to their ''kept'' parents to also be preserved as
 they were not deleted and following the `CASCADE` chain just doesn't make
 sense here.

 If this had been discovered during the 1.9.x life cycle this could have
 qualified for a potential data loss backport but I'm not sure what should
 be done at this point.

 The `keep_parents` option was added in
 81c2d9f60b9206c1291e5b1c3c8686f24a7726e1 to fix the long standing #15579.

--
Ticket URL: <https://code.djangoproject.com/ticket/27407>
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 django-updates+unsubscr...@googlegroups.com.
To post to this group, send email to django-updates@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/django-updates/052.fd8ef3e36f75fb053daaa4db17d7223a%40djangoproject.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to