Opened 15 years ago
Closed 15 years ago
#12166 closed (duplicate)
Instance.delete() cascade deletes related objects with null=True
Reported by: | oremj | Owned by: | nobody |
---|---|---|---|
Component: | Uncategorized | Version: | 1.1 |
Severity: | Keywords: | ||
Cc: | Triage Stage: | Unreviewed | |
Has patch: | no | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Server model relation:
server_model = models.ForeignKey('ServerModel', blank=True, null=True)
a = System.objects.all()[0] b = ServerModels.objects.all()[0] b.delete()
Both b and a are deleted.
db.connection.queries:
{'sql': u'SELECT `systems`.`id`, `systems`.`hostname`, `systems`.`serial`, `systems`.`operating_system_id`, `systems`.`server_model_id`, `systems`.`created_on`, `systems`.`updated_on`, `systems`.`oob_ip`, `systems`.`asset_tag`, `systems`.`notes`, `systems`.`licenses`, `systems`.`allocation_id`, `systems`.`system_rack_id`, `systems`.`rack_order`, `systems`.`switch_ports`, `systems`.`patch_panel_port`, `systems`.`oob_switch_port`, `systems`.`purchase_date`, `systems`.`purchase_price`, `systems`.`system_status_id`, `systems`.`change_password`, `systems`.`ram` FROM `systems` WHERE `systems`.`server_model_id` = 221 ', {'sql': u'UPDATE `systems` SET `server_model_id` = NULL WHERE `id` IN (1333)', {'sql': u'DELETE FROM `systems` WHERE `id` IN (1333)'}, {'sql': u'DELETE FROM `server_models` WHERE `id` IN (221)'}]
I'm not seeing this problem on 1.1, but I am seeing it on 1.1.1 and later.
Change History (3)
comment:1 by , 15 years ago
comment:2 by , 15 years ago
Having the same problem with:
class Blog(models.Model): ... last_comment = models.ForeignKey('BlogComment', blank = True, null = True, editable = False) class BlogComment(CommonComment): blog = models.ForeignKey(Blog)
When deleting last comment the whole blog is deleted. Django should be able to behave in 'on delete set null' style.
Having this on 1.1
comment:3 by , 15 years ago
Resolution: | → duplicate |
---|---|
Status: | new → closed |
More options for delete behavior is the subject of #7539. Right now Django just does CASCADE. If that isn't what you want there are ways to get around it, see for example: http://stackoverflow.com/questions/1006135/how-do-i-create-a-django-model-with-foreignkeys-which-does-not-cascade-deletes-to
Nevermind, this also happens on 1.1.