#7539: Add ON DELETE and ON UPDATE support to Django
---------------------------------------------------+------------------------
Reporter: glassfordm | Owner:
Status: new | Milestone:
Component: Database layer (models, ORM) | Version: SVN
Resolution: | Keywords: feature
Stage: Design decision needed | Has_patch: 1
Needs_docs: 1 | Needs_tests: 0
Needs_better_patch: 0 |
---------------------------------------------------+------------------------
Comment (by anonymous):
@glassfordm: Is it possible that you forgot to `svn add` your tests before
making the diff? I can't find any `on_delete` related tests, except a
handful of low level tests for `CollectedFields`.
The patch I just attached is based on `on_delete_on_update-r11620.diff`. I
made the following changes:
* Removed checks for `default` and `null` in `_handle_sub_obj()` (as
these are static properties of fields and already checked in
`contribute_to_class()`). These checks should perhaps be moved to
`django.core.management.validation`.
* Moved instance-update and sql-update code inside `CollectedFields` so
the actual data structure doesn't have to be known to code outside. Is
there a reason field updates are not simply collected in
`CollectedObjects`, too?
* Changed how update queries are performed: instead of one per instance,
it now uses one (batch) per field. Except for corner cases (more than
GET_ITERATOR_CHUNK_SIZE foreign keys on a single model affected), this
results in fewer queries.
* Added a pony of mine: `on_delete=DO_NOTHING`, which would help with
#10829.
I didn't write any tests (bad), but all existing tests pass. Which
hopefully means that at least I haven't broken CASCADE and SET_NULL.
Regarding stale related object caches, I'd do nothing special. Django
currently doesn't refresh them, so any change here (for SET_NULL or
CASCADE) would be backwards incompatible. And there is no guarantee the
cache won't be stale again, when `_handle_sub_obj()` is called anyway.
So this is a documentation issue with `Model.delete()` at best, since
`QuerySet.delete()` always uses "fresh" data.
--
Ticket URL: <
http://code.djangoproject.com/ticket/7539#comment:28>
Django <
http://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 post to this group, send email to
django-updates@...
To unsubscribe from this group, send email to
django-updates+unsubscribe@...
For more options, visit this group at
http://groups.google.com/group/django-updates?hl=en-~----------~----~----~----~------~----~------~--~---