﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
27407	Model.delete(keep_parents=True) should preserve parent reverse relationships	Simon Charette	nobody	"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."	Bug	closed	Database layer (models, ORM)	1.9	Normal	fixed			Ready for checkin	1	0	0	0	0	0
