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:
parent
43179e41ae
commit
f771586deb
@ -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."
|
||||
|
@ -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()
|
||||
|
Loading…
x
Reference in New Issue
Block a user