1
0
mirror of https://github.com/django/django.git synced 2025-04-22 00:04:43 +00:00

magic-removal: Moved delete() from Manager to QuerySet

git-svn-id: http://code.djangoproject.com/svn/django/branches/magic-removal@2166 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
Adrian Holovaty 2006-01-30 03:17:19 +00:00
parent 43179e41ae
commit f771586deb
2 changed files with 29 additions and 58 deletions

View File

@ -35,32 +35,7 @@ dispatcher.connect(ensure_default_manager, signal=signals.class_prepared)
# params=id_list)
# obj_list = list(new_query)
# return dict([(obj._get_pk_val(), obj) for obj in obj_list])
#
# def delete(self, **kwargs):
# # Remove the DELETE_ALL argument, if it exists.
# delete_all = kwargs.pop('DELETE_ALL', False)
#
# # Check for at least one query argument.
# if not kwargs and not delete_all:
# raise TypeError, "SAFETY MECHANISM: Specify DELETE_ALL=True if you actually want to delete all data."
#
# if kwargs:
# del_query = self.filter(**kwargs)
# else:
# del_query = self._clone()
# # disable non-supported fields
# del_query._select_related = False
# del_query._select = {}
# del_query._order_by = []
# del_query._offset = None
# del_query._limit = None
#
# opts = self.klass._meta
#
# # Perform the SQL delete
# cursor = connection.cursor()
# _, sql, params = del_query._get_sql_clause(False)
# cursor.execute("DELETE " + sql, params)
class Manager(QuerySet):
# Tracks each time a Manager instance is created. Used to retain order.
@ -88,30 +63,6 @@ class Manager(QuerySet):
if not hasattr(klass, '_default_manager') or self.creation_counter < klass._default_manager.creation_counter:
klass._default_manager = self
def delete(self, *args, **kwargs):
num_args = len(args) + len(kwargs)
# Remove the DELETE_ALL argument, if it exists.
delete_all = kwargs.pop('DELETE_ALL', False)
# Check for at least one query argument.
if num_args == 0 and not delete_all:
raise TypeError, "SAFETY MECHANISM: Specify DELETE_ALL=True if you actually want to delete all data."
# disable non-supported fields
kwargs['select_related'] = False
kwargs['select'] = {}
kwargs['order_by'] = []
kwargs['offset'] = None
kwargs['limit'] = None
opts = self.klass._meta
# Perform the SQL delete
cursor = connection.cursor()
_, sql, params = self._get_sql_clause(False, *args, **kwargs)
cursor.execute("DELETE " + sql, params)
def in_bulk(self, id_list, *args, **kwargs):
assert isinstance(id_list, list), "get_in_bulk() must be provided with a list of IDs."
assert id_list != [], "get_in_bulk() cannot be passed an empty ID list."

View File

@ -138,6 +138,34 @@ class QuerySet(object):
assert len(obj_list) == 1, "get() returned more than one %s -- it returned %s! Lookup parameters were %s" % (self.klass._meta.object_name, len(obj_list), kwargs)
return obj_list[0]
def delete(self, **kwargs):
"""
Deletes the records with the given kwargs. If no kwargs are given,
deletes records in the current QuerySet.
"""
# Remove the DELETE_ALL argument, if it exists.
delete_all = kwargs.pop('DELETE_ALL', False)
# Check for at least one query argument.
if not kwargs and not delete_all:
raise TypeError, "SAFETY MECHANISM: Specify DELETE_ALL=True if you actually want to delete all data."
if kwargs:
del_query = self.filter(**kwargs)
else:
del_query = self._clone()
# disable non-supported fields
del_query._select_related = False
del_query._select = {}
del_query._order_by = []
del_query._offset = None
del_query._limit = None
# Perform the SQL delete
cursor = connection.cursor()
_, sql, params = del_query._get_sql_clause(False)
cursor.execute("DELETE " + sql, params)
#############################################
# PUBLIC METHODS THAT RETURN A NEW QUERYSET #
#############################################
@ -292,14 +320,6 @@ class QuerySet(object):
# combined._filter = self._filter | other._filter
# return combined
#
# def _fetch_data(self):
# if self._use_cache:
# if self._result_cache is None:
# self._result_cache = list(self.get_iterator())
# return self._result_cache
# else:
# return list(self.get_iterator())
#
# def __getitem__(self, k):
# """Retrieve an item or slice from the set of results"""
# # getitem can't return query instances, because .filter()