Changeset 1885
- Timestamp:
- 01/09/06 08:34:17 (3 years ago)
- Files:
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/branches/magic-removal/django/db/models/manager.py
r1884 r1885 190 190 return obj_list[0] 191 191 192 def get_in_bulk(self, *args, **kwargs): 193 # Separate any list arguments: the first list will be used as the id list; subsequent 194 # lists will be ignored. 195 id_args = filter(lambda arg: isinstance(arg, list), args) 196 # Separate any non-list arguments: these are assumed to be query arguments 197 sql_args = filter(lambda arg: not isinstance(arg, list), args) 198 199 id_list = id_args and id_args[0] or kwargs.get('id_list', []) 192 def get_in_bulk(self, id_list, *args, **kwargs): 193 assert isinstance(id_list, list), "get_in_bulk() must be provided with a list of IDs." 200 194 assert id_list != [], "get_in_bulk() cannot be passed an empty ID list." 201 195 kwargs['where'] = ["%s.%s IN (%s)" % (backend.quote_name(self.klass._meta.db_table), backend.quote_name(self.klass._meta.pk.column), ",".join(['%s'] * len(id_list)))] 202 196 kwargs['params'] = id_list 203 obj_list = self.get_list(* sql_args, **kwargs)197 obj_list = self.get_list(*args, **kwargs) 204 198 return dict([(getattr(o, self.klass._meta.pk.attname), o) for o in obj_list]) 205 199 … … 234 228 return self.get_object(*args, **kwargs) 235 229 236 def __get_date_list(self, field, *args, **kwargs): 237 # Separate any string arguments: the first will be used as the kind 238 kind_args = filter(lambda arg: isinstance(arg, str), args) 239 # Separate any non-list arguments: these are assumed to be query arguments 240 sql_args = filter(lambda arg: not isinstance(arg, str), args) 241 230 def __get_date_list(self, field, kind, *args, **kwargs): 242 231 from django.db.backends.util import typecast_timestamp 243 kind = kind_args and kind_args[0] or kwargs.get(['kind'],"")244 232 assert kind in ("month", "year", "day"), "'kind' must be one of 'year', 'month' or 'day'." 245 233 order = 'ASC' … … 252 240 kwargs.setdefault('where', []).append('%s.%s IS NOT NULL' % \ 253 241 (backend.quote_name(self.klass._meta.db_table), backend.quote_name(field.column))) 254 select, sql, params = self._get_sql_clause(* sql_args, **kwargs)242 select, sql, params = self._get_sql_clause(*args, **kwargs) 255 243 sql = 'SELECT %s %s GROUP BY 1 ORDER BY 1 %s' % \ 256 244 (backend.get_date_trunc_sql(kind, '%s.%s' % (backend.quote_name(self.klass._meta.db_table), django/branches/magic-removal/tests/modeltests/basic/models.py
r1631 r1885 181 181 [datetime.datetime(2005, 7, 31, 0, 0), datetime.datetime(2005, 7, 30, 0, 0), datetime.datetime(2005, 7, 29, 0, 0), datetime.datetime(2005, 7, 28, 0, 0)] 182 182 183 # Try some bad arguments to __get_date_list 184 >>> Article.objects.get_pub_date_list('badarg') 185 Traceback (most recent call last): 186 ... 187 AssertionError: 'kind' must be one of 'year', 'month' or 'day'. 188 >>> Article.objects.get_pub_date_list(order='ASC') 189 Traceback (most recent call last): 190 ... 191 TypeError: __get_date_list() takes at least 3 non-keyword arguments (2 given) 192 193 183 194 # An Article instance doesn't have access to the "objects" attribute. 184 195 # That is only available as a class method. django/branches/magic-removal/tests/modeltests/lookup/models.py
r1884 r1885 70 70 ... 71 71 AssertionError: get_in_bulk() cannot be passed an empty ID list. 72 >>> Article.objects.get_in_bulk('foo') 73 Traceback (most recent call last): 74 ... 75 AssertionError: get_in_bulk() must be provided with a list of IDs. 76 >>> Article.objects.get_in_bulk() 77 Traceback (most recent call last): 78 ... 79 TypeError: get_in_bulk() takes at least 2 arguments (1 given) 80 >>> Article.objects.get_in_bulk(headline__startswith='Blah') 81 Traceback (most recent call last): 82 ... 83 TypeError: get_in_bulk() takes at least 2 non-keyword arguments (1 given) 72 84 73 85 # get_values() is just like get_list(), except it returns a list of
