diff options
| author | Carl Meyer <carl@oddbird.net> | 2010-11-09 16:46:42 +0000 |
|---|---|---|
| committer | Carl Meyer <carl@oddbird.net> | 2010-11-09 16:46:42 +0000 |
| commit | 616b30227d901a7452810a9ffaa55eaf186dc9e1 (patch) | |
| tree | a90a046c56bc8c25fc3ce5c0021c02b8ff77c0ba /django/db/models/sql | |
| parent | 3ba3294c6b5ad413731223a9e46064a8e132acd2 (diff) | |
Fixed #7539, #13067 -- Added on_delete argument to ForeignKey to control cascade behavior. Also refactored deletion for efficiency and code clarity. Many thanks to Johannes Dollinger and Michael Glassford for extensive work on the patch, and to Alex Gaynor, Russell Keith-Magee, and Jacob Kaplan-Moss for review.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@14507 bcc190cf-cafb-0310-a4f2-bffc1f526a37
Diffstat (limited to 'django/db/models/sql')
| -rw-r--r-- | django/db/models/sql/subqueries.py | 19 |
1 files changed, 7 insertions, 12 deletions
diff --git a/django/db/models/sql/subqueries.py b/django/db/models/sql/subqueries.py index bad84c8eb8..a62adfe0fc 100644 --- a/django/db/models/sql/subqueries.py +++ b/django/db/models/sql/subqueries.py @@ -27,16 +27,17 @@ class DeleteQuery(Query): self.where = where self.get_compiler(using).execute_sql(None) - def delete_batch(self, pk_list, using): + def delete_batch(self, pk_list, using, field=None): """ Set up and execute delete queries for all the objects in pk_list. More than one physical query may be executed if there are a lot of values in pk_list. """ + if not field: + field = self.model._meta.pk for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): where = self.where_class() - field = self.model._meta.pk where.add((Constraint(None, field.column, field), 'in', pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND) self.do_query(self.model._meta.db_table, where, using=using) @@ -68,20 +69,14 @@ class UpdateQuery(Query): related_updates=self.related_updates.copy(), **kwargs) - def clear_related(self, related_field, pk_list, using): - """ - Set up and execute an update query that clears related entries for the - keys in pk_list. - - This is used by the QuerySet.delete_objects() method. - """ + def update_batch(self, pk_list, values, using): + pk_field = self.model._meta.pk + self.add_update_values(values) for offset in range(0, len(pk_list), GET_ITERATOR_CHUNK_SIZE): self.where = self.where_class() - f = self.model._meta.pk - self.where.add((Constraint(None, f.column, f), 'in', + self.where.add((Constraint(None, pk_field.column, pk_field), 'in', pk_list[offset : offset + GET_ITERATOR_CHUNK_SIZE]), AND) - self.values = [(related_field, None, None)] self.get_compiler(using).execute_sql(None) def add_update_values(self, values): |
