Changeset 8455
- Timestamp:
- 08/20/08 17:38:15 (11 months ago)
- Files:
-
- django/trunk/django/db/models/query.py (modified) (2 diffs)
- django/trunk/django/db/models/sql/datastructures.py (modified) (1 diff)
- django/trunk/django/db/models/sql/subqueries.py (modified) (1 diff)
- django/trunk/tests/regressiontests/queries/models.py (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
django/trunk/django/db/models/query.py
r8398 r8455 453 453 assert order in ('ASC', 'DESC'), \ 454 454 "'order' must be either 'ASC' or 'DESC'." 455 # Let the FieldDoesNotExist exception propagate. 456 field = self.model._meta.get_field(field_name, many_to_many=False) 457 assert isinstance(field, DateField), "%r isn't a DateField." \ 458 % field_name 459 return self._clone(klass=DateQuerySet, setup=True, _field=field, 460 _kind=kind, _order=order) 455 return self._clone(klass=DateQuerySet, setup=True, 456 _field_name=field_name, _kind=kind, _order=order) 461 457 462 458 def none(self): … … 722 718 self.query = self.query.clone(klass=sql.DateQuery, setup=True) 723 719 self.query.select = [] 724 self.query.add_date_select(self._field, self._kind, self._order) 725 if self._field.null: 726 self.query.add_filter(('%s__isnull' % self._field.name, False)) 720 field = self.model._meta.get_field(self._field_name, many_to_many=False) 721 assert isinstance(field, DateField), "%r isn't a DateField." \ 722 % field_name 723 self.query.add_date_select(field, self._kind, self._order) 724 if field.null: 725 self.query.add_filter(('%s__isnull' % field.name, False)) 727 726 728 727 def _clone(self, klass=None, setup=False, **kwargs): 729 728 c = super(DateQuerySet, self)._clone(klass, False, **kwargs) 730 c._field = self._field729 c._field_name = self._field_name 731 730 c._kind = self._kind 732 731 if setup and hasattr(c, '_setup_query'): django/trunk/django/db/models/sql/datastructures.py
r7477 r8455 86 86 self.col = col 87 87 self.lookup_type = lookup_type 88 self.date_sql_func = date_sql_func88 self.date_sql_func = date_sql_func 89 89 90 90 def relabel_aliases(self, change_map): django/trunk/django/db/models/sql/subqueries.py
r8267 r8455 344 344 back to Python objects, so we put it in a separate class. 345 345 """ 346 def __getstate__(self): 347 """ 348 Special DateQuery-specific pickle handling. 349 """ 350 for elt in self.select: 351 if isinstance(elt, Date): 352 # Eliminate a method reference that can't be pickled. The 353 # __setstate__ method restores this. 354 elt.date_sql_func = None 355 return super(DateQuery, self).__getstate__() 356 357 def __setstate__(self, obj_dict): 358 super(DateQuery, self).__setstate__(obj_dict) 359 for elt in self.select: 360 if isinstance(elt, Date): 361 self.date_sql_func = self.connection.ops.date_trunc_sql 362 346 363 def results_iter(self): 347 364 """ django/trunk/tests/regressiontests/queries/models.py
r8413 r8455 898 898 [<ExtraInfo: e1>] 899 899 900 Pickling of DateQuerySets used to fail 901 >>> qs = Item.objects.dates('created', 'month') 902 >>> _ = pickle.loads(pickle.dumps(qs)) 903 900 904 """} 901 905
