1 | diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
|
---|
2 | index 8de3112..f429af5 100644
|
---|
3 | --- a/django/contrib/admin/options.py
|
---|
4 | +++ b/django/contrib/admin/options.py
|
---|
5 | @@ -222,7 +222,7 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
|
---|
6 | Returns a QuerySet of all model instances that can be edited by the
|
---|
7 | admin site. This is used by changelist_view.
|
---|
8 | """
|
---|
9 | - qs = self.model._default_manager.get_query_set()
|
---|
10 | + qs = self.model._default_manager.get_queryset()
|
---|
11 | # TODO: this should be handled by some parameter to the ChangeList.
|
---|
12 | ordering = self.get_ordering(request)
|
---|
13 | if ordering:
|
---|
14 | @@ -1187,7 +1187,7 @@ class ModelAdmin(BaseModelAdmin):
|
---|
15 | if (actions and request.method == 'POST' and
|
---|
16 | 'index' in request.POST and '_save' not in request.POST):
|
---|
17 | if selected:
|
---|
18 | - response = self.response_action(request, queryset=cl.get_query_set(request))
|
---|
19 | + response = self.response_action(request, queryset=cl.get_queryset(request))
|
---|
20 | if response:
|
---|
21 | return response
|
---|
22 | else:
|
---|
23 | @@ -1203,7 +1203,7 @@ class ModelAdmin(BaseModelAdmin):
|
---|
24 | helpers.ACTION_CHECKBOX_NAME in request.POST and
|
---|
25 | 'index' not in request.POST and '_save' not in request.POST):
|
---|
26 | if selected:
|
---|
27 | - response = self.response_action(request, queryset=cl.get_query_set(request))
|
---|
28 | + response = self.response_action(request, queryset=cl.get_queryset(request))
|
---|
29 | if response:
|
---|
30 | return response
|
---|
31 | else:
|
---|
32 | diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
|
---|
33 | index 4b296b3..c45d5d8 100644
|
---|
34 | --- a/django/contrib/admin/views/main.py
|
---|
35 | +++ b/django/contrib/admin/views/main.py
|
---|
36 | @@ -6,7 +6,9 @@ from django.core.paginator import InvalidPage
|
---|
37 | from django.core.urlresolvers import reverse
|
---|
38 | from django.db import models
|
---|
39 | from django.db.models.fields import FieldDoesNotExist
|
---|
40 | +from django.utils import six
|
---|
41 | from django.utils.datastructures import SortedDict
|
---|
42 | +from django.utils.deprecation import DeprecatedGetQuerySet
|
---|
43 | from django.utils.encoding import force_str, force_text
|
---|
44 | from django.utils.translation import ugettext, ugettext_lazy
|
---|
45 | from django.utils.http import urlencode
|
---|
46 | @@ -33,7 +35,7 @@ IGNORED_PARAMS = (
|
---|
47 | EMPTY_CHANGELIST_VALUE = ugettext_lazy('(None)')
|
---|
48 |
|
---|
49 |
|
---|
50 | -class ChangeList(object):
|
---|
51 | +class ChangeList(six.with_metaclass(DeprecatedGetQuerySet)):
|
---|
52 | def __init__(self, request, model, list_display, list_display_links,
|
---|
53 | list_filter, date_hierarchy, search_fields, list_select_related,
|
---|
54 | list_per_page, list_max_show_all, list_editable, model_admin):
|
---|
55 | @@ -70,7 +72,7 @@ class ChangeList(object):
|
---|
56 | else:
|
---|
57 | self.list_editable = list_editable
|
---|
58 | self.query = request.GET.get(SEARCH_VAR, '')
|
---|
59 | - self.query_set = self.get_query_set(request)
|
---|
60 | + self.query_set = self.get_queryset(request)
|
---|
61 | self.get_results(request)
|
---|
62 | if self.is_popup:
|
---|
63 | title = ugettext('Select %s')
|
---|
64 | @@ -297,7 +299,7 @@ class ChangeList(object):
|
---|
65 | ordering_fields[idx] = 'desc' if pfx == '-' else 'asc'
|
---|
66 | return ordering_fields
|
---|
67 |
|
---|
68 | - def get_query_set(self, request):
|
---|
69 | + def get_queryset(self, request):
|
---|
70 | # First, we collect all the declared list filters.
|
---|
71 | (self.filter_specs, self.has_filters, remaining_lookup_params,
|
---|
72 | use_distinct) = self.get_filters(request)
|
---|
73 | diff --git a/django/contrib/comments/managers.py b/django/contrib/comments/managers.py
|
---|
74 | index bc0fc5f..6562004 100644
|
---|
75 | --- a/django/contrib/comments/managers.py
|
---|
76 | +++ b/django/contrib/comments/managers.py
|
---|
77 | @@ -8,7 +8,7 @@ class CommentManager(models.Manager):
|
---|
78 | """
|
---|
79 | QuerySet for all comments currently in the moderation queue.
|
---|
80 | """
|
---|
81 | - return self.get_query_set().filter(is_public=False, is_removed=False)
|
---|
82 | + return self.get_queryset().filter(is_public=False, is_removed=False)
|
---|
83 |
|
---|
84 | def for_model(self, model):
|
---|
85 | """
|
---|
86 | @@ -16,7 +16,7 @@ class CommentManager(models.Manager):
|
---|
87 | a class).
|
---|
88 | """
|
---|
89 | ct = ContentType.objects.get_for_model(model)
|
---|
90 | - qs = self.get_query_set().filter(content_type=ct)
|
---|
91 | + qs = self.get_queryset().filter(content_type=ct)
|
---|
92 | if isinstance(model, models.Model):
|
---|
93 | qs = qs.filter(object_pk=force_text(model._get_pk_val()))
|
---|
94 | return qs
|
---|
95 | diff --git a/django/contrib/comments/templatetags/comments.py b/django/contrib/comments/templatetags/comments.py
|
---|
96 | index 4d4eb23..900c08f 100644
|
---|
97 | --- a/django/contrib/comments/templatetags/comments.py
|
---|
98 | +++ b/django/contrib/comments/templatetags/comments.py
|
---|
99 | @@ -3,11 +3,14 @@ from django.template.loader import render_to_string
|
---|
100 | from django.conf import settings
|
---|
101 | from django.contrib.contenttypes.models import ContentType
|
---|
102 | from django.contrib import comments
|
---|
103 | +from django.utils import six
|
---|
104 | +from django.utils.deprecation import DeprecatedGetQuerySet
|
---|
105 | from django.utils.encoding import smart_text
|
---|
106 |
|
---|
107 | register = template.Library()
|
---|
108 |
|
---|
109 | -class BaseCommentNode(template.Node):
|
---|
110 | +
|
---|
111 | +class BaseCommentNode(six.with_metaclass(DeprecatedGetQuerySet, template.Node)):
|
---|
112 | """
|
---|
113 | Base helper class (abstract) for handling the get_comment_* template tags.
|
---|
114 | Looks a bit strange, but the subclasses below should make this a bit more
|
---|
115 | @@ -64,11 +67,11 @@ class BaseCommentNode(template.Node):
|
---|
116 | self.comment = comment
|
---|
117 |
|
---|
118 | def render(self, context):
|
---|
119 | - qs = self.get_query_set(context)
|
---|
120 | + qs = self.get_queryset(context)
|
---|
121 | context[self.as_varname] = self.get_context_value_from_queryset(context, qs)
|
---|
122 | return ''
|
---|
123 |
|
---|
124 | - def get_query_set(self, context):
|
---|
125 | + def get_queryset(self, context):
|
---|
126 | ctype, object_pk = self.get_target_ctype_pk(context)
|
---|
127 | if not object_pk:
|
---|
128 | return self.comment_model.objects.none()
|
---|
129 | @@ -205,7 +208,7 @@ class RenderCommentListNode(CommentListNode):
|
---|
130 | "comments/%s/list.html" % ctype.app_label,
|
---|
131 | "comments/list.html"
|
---|
132 | ]
|
---|
133 | - qs = self.get_query_set(context)
|
---|
134 | + qs = self.get_queryset(context)
|
---|
135 | context.push()
|
---|
136 | liststr = render_to_string(template_search_list, {
|
---|
137 | "comment_list" : self.get_context_value_from_queryset(context, qs)
|
---|
138 | diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
|
---|
139 | index 20ff704..9624964 100644
|
---|
140 | --- a/django/contrib/contenttypes/generic.py
|
---|
141 | +++ b/django/contrib/contenttypes/generic.py
|
---|
142 | @@ -316,12 +316,12 @@ def create_generic_related_manager(superclass):
|
---|
143 | '%s__exact' % object_id_field_name: instance._get_pk_val(),
|
---|
144 | }
|
---|
145 |
|
---|
146 | - def get_query_set(self):
|
---|
147 | + def get_queryset(self):
|
---|
148 | try:
|
---|
149 | return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
|
---|
150 | except (AttributeError, KeyError):
|
---|
151 | db = self._db or router.db_for_read(self.model, instance=self.instance)
|
---|
152 | - return super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**self.core_filters)
|
---|
153 | + return super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**self.core_filters)
|
---|
154 |
|
---|
155 | def get_prefetch_query_set(self, instances):
|
---|
156 | db = self._db or router.db_for_read(self.model, instance=instances[0])
|
---|
157 | @@ -330,7 +330,7 @@ def create_generic_related_manager(superclass):
|
---|
158 | '%s__in' % self.object_id_field_name:
|
---|
159 | set(obj._get_pk_val() for obj in instances)
|
---|
160 | }
|
---|
161 | - qs = super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**query)
|
---|
162 | + qs = super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**query)
|
---|
163 | # We (possibly) need to convert object IDs to the type of the
|
---|
164 | # instances' PK in order to match up instances:
|
---|
165 | object_id_converter = instances[0]._meta.pk.to_python
|
---|
166 | diff --git a/django/contrib/gis/db/models/manager.py b/django/contrib/gis/db/models/manager.py
|
---|
167 | index 61fb821..bbcbb57 100644
|
---|
168 | --- a/django/contrib/gis/db/models/manager.py
|
---|
169 | +++ b/django/contrib/gis/db/models/manager.py
|
---|
170 | @@ -1,6 +1,7 @@
|
---|
171 | from django.db.models.manager import Manager
|
---|
172 | from django.contrib.gis.db.models.query import GeoQuerySet
|
---|
173 |
|
---|
174 | +
|
---|
175 | class GeoManager(Manager):
|
---|
176 | "Overrides Manager to return Geographic QuerySets."
|
---|
177 |
|
---|
178 | @@ -9,95 +10,95 @@ class GeoManager(Manager):
|
---|
179 | # properly.
|
---|
180 | use_for_related_fields = True
|
---|
181 |
|
---|
182 | - def get_query_set(self):
|
---|
183 | + def get_queryset(self):
|
---|
184 | return GeoQuerySet(self.model, using=self._db)
|
---|
185 |
|
---|
186 | def area(self, *args, **kwargs):
|
---|
187 | - return self.get_query_set().area(*args, **kwargs)
|
---|
188 | + return self.get_queryset().area(*args, **kwargs)
|
---|
189 |
|
---|
190 | def centroid(self, *args, **kwargs):
|
---|
191 | - return self.get_query_set().centroid(*args, **kwargs)
|
---|
192 | + return self.get_queryset().centroid(*args, **kwargs)
|
---|
193 |
|
---|
194 | def collect(self, *args, **kwargs):
|
---|
195 | - return self.get_query_set().collect(*args, **kwargs)
|
---|
196 | + return self.get_queryset().collect(*args, **kwargs)
|
---|
197 |
|
---|
198 | def difference(self, *args, **kwargs):
|
---|
199 | - return self.get_query_set().difference(*args, **kwargs)
|
---|
200 | + return self.get_queryset().difference(*args, **kwargs)
|
---|
201 |
|
---|
202 | def distance(self, *args, **kwargs):
|
---|
203 | - return self.get_query_set().distance(*args, **kwargs)
|
---|
204 | + return self.get_queryset().distance(*args, **kwargs)
|
---|
205 |
|
---|
206 | def envelope(self, *args, **kwargs):
|
---|
207 | - return self.get_query_set().envelope(*args, **kwargs)
|
---|
208 | + return self.get_queryset().envelope(*args, **kwargs)
|
---|
209 |
|
---|
210 | def extent(self, *args, **kwargs):
|
---|
211 | - return self.get_query_set().extent(*args, **kwargs)
|
---|
212 | + return self.get_queryset().extent(*args, **kwargs)
|
---|
213 |
|
---|
214 | def extent3d(self, *args, **kwargs):
|
---|
215 | - return self.get_query_set().extent3d(*args, **kwargs)
|
---|
216 | + return self.get_queryset().extent3d(*args, **kwargs)
|
---|
217 |
|
---|
218 | def force_rhr(self, *args, **kwargs):
|
---|
219 | - return self.get_query_set().force_rhr(*args, **kwargs)
|
---|
220 | + return self.get_queryset().force_rhr(*args, **kwargs)
|
---|
221 |
|
---|
222 | def geohash(self, *args, **kwargs):
|
---|
223 | - return self.get_query_set().geohash(*args, **kwargs)
|
---|
224 | + return self.get_queryset().geohash(*args, **kwargs)
|
---|
225 |
|
---|
226 | def geojson(self, *args, **kwargs):
|
---|
227 | - return self.get_query_set().geojson(*args, **kwargs)
|
---|
228 | + return self.get_queryset().geojson(*args, **kwargs)
|
---|
229 |
|
---|
230 | def gml(self, *args, **kwargs):
|
---|
231 | - return self.get_query_set().gml(*args, **kwargs)
|
---|
232 | + return self.get_queryset().gml(*args, **kwargs)
|
---|
233 |
|
---|
234 | def intersection(self, *args, **kwargs):
|
---|
235 | - return self.get_query_set().intersection(*args, **kwargs)
|
---|
236 | + return self.get_queryset().intersection(*args, **kwargs)
|
---|
237 |
|
---|
238 | def kml(self, *args, **kwargs):
|
---|
239 | - return self.get_query_set().kml(*args, **kwargs)
|
---|
240 | + return self.get_queryset().kml(*args, **kwargs)
|
---|
241 |
|
---|
242 | def length(self, *args, **kwargs):
|
---|
243 | - return self.get_query_set().length(*args, **kwargs)
|
---|
244 | + return self.get_queryset().length(*args, **kwargs)
|
---|
245 |
|
---|
246 | def make_line(self, *args, **kwargs):
|
---|
247 | - return self.get_query_set().make_line(*args, **kwargs)
|
---|
248 | + return self.get_queryset().make_line(*args, **kwargs)
|
---|
249 |
|
---|
250 | def mem_size(self, *args, **kwargs):
|
---|
251 | - return self.get_query_set().mem_size(*args, **kwargs)
|
---|
252 | + return self.get_queryset().mem_size(*args, **kwargs)
|
---|
253 |
|
---|
254 | def num_geom(self, *args, **kwargs):
|
---|
255 | - return self.get_query_set().num_geom(*args, **kwargs)
|
---|
256 | + return self.get_queryset().num_geom(*args, **kwargs)
|
---|
257 |
|
---|
258 | def num_points(self, *args, **kwargs):
|
---|
259 | - return self.get_query_set().num_points(*args, **kwargs)
|
---|
260 | + return self.get_queryset().num_points(*args, **kwargs)
|
---|
261 |
|
---|
262 | def perimeter(self, *args, **kwargs):
|
---|
263 | - return self.get_query_set().perimeter(*args, **kwargs)
|
---|
264 | + return self.get_queryset().perimeter(*args, **kwargs)
|
---|
265 |
|
---|
266 | def point_on_surface(self, *args, **kwargs):
|
---|
267 | - return self.get_query_set().point_on_surface(*args, **kwargs)
|
---|
268 | + return self.get_queryset().point_on_surface(*args, **kwargs)
|
---|
269 |
|
---|
270 | def reverse_geom(self, *args, **kwargs):
|
---|
271 | - return self.get_query_set().reverse_geom(*args, **kwargs)
|
---|
272 | + return self.get_queryset().reverse_geom(*args, **kwargs)
|
---|
273 |
|
---|
274 | def scale(self, *args, **kwargs):
|
---|
275 | - return self.get_query_set().scale(*args, **kwargs)
|
---|
276 | + return self.get_queryset().scale(*args, **kwargs)
|
---|
277 |
|
---|
278 | def snap_to_grid(self, *args, **kwargs):
|
---|
279 | - return self.get_query_set().snap_to_grid(*args, **kwargs)
|
---|
280 | + return self.get_queryset().snap_to_grid(*args, **kwargs)
|
---|
281 |
|
---|
282 | def svg(self, *args, **kwargs):
|
---|
283 | - return self.get_query_set().svg(*args, **kwargs)
|
---|
284 | + return self.get_queryset().svg(*args, **kwargs)
|
---|
285 |
|
---|
286 | def sym_difference(self, *args, **kwargs):
|
---|
287 | - return self.get_query_set().sym_difference(*args, **kwargs)
|
---|
288 | + return self.get_queryset().sym_difference(*args, **kwargs)
|
---|
289 |
|
---|
290 | def transform(self, *args, **kwargs):
|
---|
291 | - return self.get_query_set().transform(*args, **kwargs)
|
---|
292 | + return self.get_queryset().transform(*args, **kwargs)
|
---|
293 |
|
---|
294 | def translate(self, *args, **kwargs):
|
---|
295 | - return self.get_query_set().translate(*args, **kwargs)
|
---|
296 | + return self.get_queryset().translate(*args, **kwargs)
|
---|
297 |
|
---|
298 | def union(self, *args, **kwargs):
|
---|
299 | - return self.get_query_set().union(*args, **kwargs)
|
---|
300 | + return self.get_queryset().union(*args, **kwargs)
|
---|
301 |
|
---|
302 | def unionagg(self, *args, **kwargs):
|
---|
303 | - return self.get_query_set().unionagg(*args, **kwargs)
|
---|
304 | + return self.get_queryset().unionagg(*args, **kwargs)
|
---|
305 | diff --git a/django/contrib/sites/managers.py b/django/contrib/sites/managers.py
|
---|
306 | index 3df485a..449e081 100644
|
---|
307 | --- a/django/contrib/sites/managers.py
|
---|
308 | +++ b/django/contrib/sites/managers.py
|
---|
309 | @@ -2,6 +2,7 @@ from django.conf import settings
|
---|
310 | from django.db import models
|
---|
311 | from django.db.models.fields import FieldDoesNotExist
|
---|
312 |
|
---|
313 | +
|
---|
314 | class CurrentSiteManager(models.Manager):
|
---|
315 | "Use this to limit objects to those associated with the current site."
|
---|
316 | def __init__(self, field_name=None):
|
---|
317 | @@ -35,7 +36,7 @@ class CurrentSiteManager(models.Manager):
|
---|
318 | (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
|
---|
319 | self.__is_validated = True
|
---|
320 |
|
---|
321 | - def get_query_set(self):
|
---|
322 | + def get_queryset(self):
|
---|
323 | if not self.__is_validated:
|
---|
324 | self._validate_field_name()
|
---|
325 | - return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
|
---|
326 | + return super(CurrentSiteManager, self).get_queryset().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
|
---|
327 | diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
|
---|
328 | index bd2e288..7f2e81c 100644
|
---|
329 | --- a/django/db/models/fields/related.py
|
---|
330 | +++ b/django/db/models/fields/related.py
|
---|
331 | @@ -1,5 +1,7 @@
|
---|
332 | from operator import attrgetter
|
---|
333 |
|
---|
334 | +from django import forms
|
---|
335 | +from django.core import exceptions
|
---|
336 | from django.db import connection, router
|
---|
337 | from django.db.backends import util
|
---|
338 | from django.db.models import signals, get_model
|
---|
339 | @@ -11,10 +13,10 @@ from django.db.models.query_utils import QueryWrapper
|
---|
340 | from django.db.models.deletion import CASCADE
|
---|
341 | from django.utils.encoding import smart_text
|
---|
342 | from django.utils import six
|
---|
343 | +from django.utils.deprecation import DeprecatedGetQuerySet
|
---|
344 | from django.utils.translation import ugettext_lazy as _, string_concat
|
---|
345 | from django.utils.functional import curry, cached_property
|
---|
346 | -from django.core import exceptions
|
---|
347 | -from django import forms
|
---|
348 | +
|
---|
349 |
|
---|
350 | RECURSIVE_RELATIONSHIP_CONSTANT = 'self'
|
---|
351 |
|
---|
352 | @@ -225,7 +227,7 @@ class RelatedField(object):
|
---|
353 | return self.rel.related_name or self.opts.model_name
|
---|
354 |
|
---|
355 |
|
---|
356 | -class SingleRelatedObjectDescriptor(object):
|
---|
357 | +class SingleRelatedObjectDescriptor(six.with_metaclass(DeprecatedGetQuerySet)):
|
---|
358 | # This class provides the functionality that makes the related-object
|
---|
359 | # managers available as attributes on a model class, for fields that have
|
---|
360 | # a single "remote" value, on the class pointed to by a related field.
|
---|
361 | @@ -238,7 +240,7 @@ class SingleRelatedObjectDescriptor(object):
|
---|
362 | def is_cached(self, instance):
|
---|
363 | return hasattr(instance, self.cache_name)
|
---|
364 |
|
---|
365 | - def get_query_set(self, **db_hints):
|
---|
366 | + def get_queryset(self, **db_hints):
|
---|
367 | db = router.db_for_read(self.related.model, **db_hints)
|
---|
368 | return self.related.model._base_manager.using(db)
|
---|
369 |
|
---|
370 | @@ -247,7 +249,7 @@ class SingleRelatedObjectDescriptor(object):
|
---|
371 | instance_attr = lambda obj: obj._get_pk_val()
|
---|
372 | instances_dict = dict((instance_attr(inst), inst) for inst in instances)
|
---|
373 | params = {'%s__pk__in' % self.related.field.name: list(instances_dict)}
|
---|
374 | - qs = self.get_query_set(instance=instances[0]).filter(**params)
|
---|
375 | + qs = self.get_queryset(instance=instances[0]).filter(**params)
|
---|
376 | # Since we're going to assign directly in the cache,
|
---|
377 | # we must manage the reverse relation cache manually.
|
---|
378 | rel_obj_cache_name = self.related.field.get_cache_name()
|
---|
379 | @@ -268,7 +270,7 @@ class SingleRelatedObjectDescriptor(object):
|
---|
380 | else:
|
---|
381 | params = {'%s__pk' % self.related.field.name: related_pk}
|
---|
382 | try:
|
---|
383 | - rel_obj = self.get_query_set(instance=instance).get(**params)
|
---|
384 | + rel_obj = self.get_queryset(instance=instance).get(**params)
|
---|
385 | except self.related.model.DoesNotExist:
|
---|
386 | rel_obj = None
|
---|
387 | else:
|
---|
388 | @@ -321,7 +323,7 @@ class SingleRelatedObjectDescriptor(object):
|
---|
389 | setattr(value, self.related.field.get_cache_name(), instance)
|
---|
390 |
|
---|
391 |
|
---|
392 | -class ReverseSingleRelatedObjectDescriptor(object):
|
---|
393 | +class ReverseSingleRelatedObjectDescriptor(six.with_metaclass(DeprecatedGetQuerySet)):
|
---|
394 | # This class provides the functionality that makes the related-object
|
---|
395 | # managers available as attributes on a model class, for fields that have
|
---|
396 | # a single "remote" value, on the class that defines the related field.
|
---|
397 | @@ -334,7 +336,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
---|
398 | def is_cached(self, instance):
|
---|
399 | return hasattr(instance, self.cache_name)
|
---|
400 |
|
---|
401 | - def get_query_set(self, **db_hints):
|
---|
402 | + def get_queryset(self, **db_hints):
|
---|
403 | db = router.db_for_read(self.field.rel.to, **db_hints)
|
---|
404 | rel_mgr = self.field.rel.to._default_manager
|
---|
405 | # If the related manager indicates that it should be used for
|
---|
406 | @@ -353,7 +355,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
---|
407 | params = {'%s__pk__in' % self.field.rel.field_name: list(instances_dict)}
|
---|
408 | else:
|
---|
409 | params = {'%s__in' % self.field.rel.field_name: list(instances_dict)}
|
---|
410 | - qs = self.get_query_set(instance=instances[0]).filter(**params)
|
---|
411 | + qs = self.get_queryset(instance=instances[0]).filter(**params)
|
---|
412 | # Since we're going to assign directly in the cache,
|
---|
413 | # we must manage the reverse relation cache manually.
|
---|
414 | if not self.field.rel.multiple:
|
---|
415 | @@ -378,7 +380,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
---|
416 | params = {'%s__%s' % (self.field.rel.field_name, other_field.rel.field_name): val}
|
---|
417 | else:
|
---|
418 | params = {'%s__exact' % self.field.rel.field_name: val}
|
---|
419 | - qs = self.get_query_set(instance=instance)
|
---|
420 | + qs = self.get_queryset(instance=instance)
|
---|
421 | # Assuming the database enforces foreign keys, this won't fail.
|
---|
422 | rel_obj = qs.get(**params)
|
---|
423 | if not self.field.rel.multiple:
|
---|
424 | @@ -490,12 +492,12 @@ class ForeignRelatedObjectsDescriptor(object):
|
---|
425 | }
|
---|
426 | self.model = rel_model
|
---|
427 |
|
---|
428 | - def get_query_set(self):
|
---|
429 | + def get_queryset(self):
|
---|
430 | try:
|
---|
431 | return self.instance._prefetched_objects_cache[rel_field.related_query_name()]
|
---|
432 | except (AttributeError, KeyError):
|
---|
433 | db = self._db or router.db_for_read(self.model, instance=self.instance)
|
---|
434 | - qs = super(RelatedManager, self).get_query_set().using(db).filter(**self.core_filters)
|
---|
435 | + qs = super(RelatedManager, self).get_queryset().using(db).filter(**self.core_filters)
|
---|
436 | if getattr(self.instance, attname) is None:
|
---|
437 | return qs.none()
|
---|
438 | qs._known_related_objects = {rel_field: {self.instance.pk: self.instance}}
|
---|
439 | @@ -507,7 +509,7 @@ class ForeignRelatedObjectsDescriptor(object):
|
---|
440 | instances_dict = dict((instance_attr(inst), inst) for inst in instances)
|
---|
441 | db = self._db or router.db_for_read(self.model, instance=instances[0])
|
---|
442 | query = {'%s__%s__in' % (rel_field.name, attname): list(instances_dict)}
|
---|
443 | - qs = super(RelatedManager, self).get_query_set().using(db).filter(**query)
|
---|
444 | + qs = super(RelatedManager, self).get_queryset().using(db).filter(**query)
|
---|
445 | # Since we just bypassed this class' get_query_set(), we must manage
|
---|
446 | # the reverse relation manually.
|
---|
447 | for rel_obj in qs:
|
---|
448 | @@ -602,12 +604,12 @@ def create_many_related_manager(superclass, rel):
|
---|
449 | else:
|
---|
450 | return obj.pk
|
---|
451 |
|
---|
452 | - def get_query_set(self):
|
---|
453 | + def get_queryset(self):
|
---|
454 | try:
|
---|
455 | return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
|
---|
456 | except (AttributeError, KeyError):
|
---|
457 | db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)
|
---|
458 | - return super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**self.core_filters)
|
---|
459 | + return super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**self.core_filters)
|
---|
460 |
|
---|
461 | def get_prefetch_query_set(self, instances):
|
---|
462 | instance = instances[0]
|
---|
463 | @@ -615,7 +617,7 @@ def create_many_related_manager(superclass, rel):
|
---|
464 | db = self._db or router.db_for_read(instance.__class__, instance=instance)
|
---|
465 | query = {'%s__pk__in' % self.query_field_name:
|
---|
466 | set(obj._get_pk_val() for obj in instances)}
|
---|
467 | - qs = super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**query)
|
---|
468 | + qs = super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**query)
|
---|
469 |
|
---|
470 | # M2M: need to annotate the query in order to get the primary model
|
---|
471 | # that the secondary model was actually related to. We know that
|
---|
472 | diff --git a/django/db/models/manager.py b/django/db/models/manager.py
|
---|
473 | index cee2131..bc1724c 100644
|
---|
474 | --- a/django/db/models/manager.py
|
---|
475 | +++ b/django/db/models/manager.py
|
---|
476 | @@ -3,6 +3,8 @@ from django.db import router
|
---|
477 | from django.db.models.query import QuerySet, insert_query, RawQuerySet
|
---|
478 | from django.db.models import signals
|
---|
479 | from django.db.models.fields import FieldDoesNotExist
|
---|
480 | +from django.utils import six
|
---|
481 | +from django.utils.deprecation import DeprecatedGetQuerySet
|
---|
482 |
|
---|
483 |
|
---|
484 | def ensure_default_manager(sender, **kwargs):
|
---|
485 | @@ -47,7 +49,7 @@ def ensure_default_manager(sender, **kwargs):
|
---|
486 | signals.class_prepared.connect(ensure_default_manager)
|
---|
487 |
|
---|
488 |
|
---|
489 | -class Manager(object):
|
---|
490 | +class Manager(six.with_metaclass(DeprecatedGetQuerySet)):
|
---|
491 | # Tracks each time a Manager instance is created. Used to retain order.
|
---|
492 | creation_counter = 0
|
---|
493 |
|
---|
494 | @@ -112,110 +114,110 @@ class Manager(object):
|
---|
495 | # PROXIES TO QUERYSET #
|
---|
496 | #######################
|
---|
497 |
|
---|
498 | - def get_query_set(self):
|
---|
499 | + def get_queryset(self):
|
---|
500 | """Returns a new QuerySet object. Subclasses can override this method
|
---|
501 | to easily customize the behavior of the Manager.
|
---|
502 | """
|
---|
503 | return QuerySet(self.model, using=self._db)
|
---|
504 |
|
---|
505 | def none(self):
|
---|
506 | - return self.get_query_set().none()
|
---|
507 | + return self.get_queryset().none()
|
---|
508 |
|
---|
509 | def all(self):
|
---|
510 | - return self.get_query_set()
|
---|
511 | + return self.get_queryset()
|
---|
512 |
|
---|
513 | def count(self):
|
---|
514 | - return self.get_query_set().count()
|
---|
515 | + return self.get_queryset().count()
|
---|
516 |
|
---|
517 | def dates(self, *args, **kwargs):
|
---|
518 | - return self.get_query_set().dates(*args, **kwargs)
|
---|
519 | + return self.get_queryset().dates(*args, **kwargs)
|
---|
520 |
|
---|
521 | def distinct(self, *args, **kwargs):
|
---|
522 | - return self.get_query_set().distinct(*args, **kwargs)
|
---|
523 | + return self.get_queryset().distinct(*args, **kwargs)
|
---|
524 |
|
---|
525 | def extra(self, *args, **kwargs):
|
---|
526 | - return self.get_query_set().extra(*args, **kwargs)
|
---|
527 | + return self.get_queryset().extra(*args, **kwargs)
|
---|
528 |
|
---|
529 | def get(self, *args, **kwargs):
|
---|
530 | - return self.get_query_set().get(*args, **kwargs)
|
---|
531 | + return self.get_queryset().get(*args, **kwargs)
|
---|
532 |
|
---|
533 | def get_or_create(self, **kwargs):
|
---|
534 | - return self.get_query_set().get_or_create(**kwargs)
|
---|
535 | + return self.get_queryset().get_or_create(**kwargs)
|
---|
536 |
|
---|
537 | def create(self, **kwargs):
|
---|
538 | - return self.get_query_set().create(**kwargs)
|
---|
539 | + return self.get_queryset().create(**kwargs)
|
---|
540 |
|
---|
541 | def bulk_create(self, *args, **kwargs):
|
---|
542 | - return self.get_query_set().bulk_create(*args, **kwargs)
|
---|
543 | + return self.get_queryset().bulk_create(*args, **kwargs)
|
---|
544 |
|
---|
545 | def filter(self, *args, **kwargs):
|
---|
546 | - return self.get_query_set().filter(*args, **kwargs)
|
---|
547 | + return self.get_queryset().filter(*args, **kwargs)
|
---|
548 |
|
---|
549 | def aggregate(self, *args, **kwargs):
|
---|
550 | - return self.get_query_set().aggregate(*args, **kwargs)
|
---|
551 | + return self.get_queryset().aggregate(*args, **kwargs)
|
---|
552 |
|
---|
553 | def annotate(self, *args, **kwargs):
|
---|
554 | - return self.get_query_set().annotate(*args, **kwargs)
|
---|
555 | + return self.get_queryset().annotate(*args, **kwargs)
|
---|
556 |
|
---|
557 | def complex_filter(self, *args, **kwargs):
|
---|
558 | - return self.get_query_set().complex_filter(*args, **kwargs)
|
---|
559 | + return self.get_queryset().complex_filter(*args, **kwargs)
|
---|
560 |
|
---|
561 | def exclude(self, *args, **kwargs):
|
---|
562 | - return self.get_query_set().exclude(*args, **kwargs)
|
---|
563 | + return self.get_queryset().exclude(*args, **kwargs)
|
---|
564 |
|
---|
565 | def in_bulk(self, *args, **kwargs):
|
---|
566 | - return self.get_query_set().in_bulk(*args, **kwargs)
|
---|
567 | + return self.get_queryset().in_bulk(*args, **kwargs)
|
---|
568 |
|
---|
569 | def iterator(self, *args, **kwargs):
|
---|
570 | - return self.get_query_set().iterator(*args, **kwargs)
|
---|
571 | + return self.get_queryset().iterator(*args, **kwargs)
|
---|
572 |
|
---|
573 | def earliest(self, *args, **kwargs):
|
---|
574 | - return self.get_query_set().earliest(*args, **kwargs)
|
---|
575 | + return self.get_queryset().earliest(*args, **kwargs)
|
---|
576 |
|
---|
577 | def latest(self, *args, **kwargs):
|
---|
578 | - return self.get_query_set().latest(*args, **kwargs)
|
---|
579 | + return self.get_queryset().latest(*args, **kwargs)
|
---|
580 |
|
---|
581 | def order_by(self, *args, **kwargs):
|
---|
582 | - return self.get_query_set().order_by(*args, **kwargs)
|
---|
583 | + return self.get_queryset().order_by(*args, **kwargs)
|
---|
584 |
|
---|
585 | def select_for_update(self, *args, **kwargs):
|
---|
586 | - return self.get_query_set().select_for_update(*args, **kwargs)
|
---|
587 | + return self.get_queryset().select_for_update(*args, **kwargs)
|
---|
588 |
|
---|
589 | def select_related(self, *args, **kwargs):
|
---|
590 | - return self.get_query_set().select_related(*args, **kwargs)
|
---|
591 | + return self.get_queryset().select_related(*args, **kwargs)
|
---|
592 |
|
---|
593 | def prefetch_related(self, *args, **kwargs):
|
---|
594 | - return self.get_query_set().prefetch_related(*args, **kwargs)
|
---|
595 | + return self.get_queryset().prefetch_related(*args, **kwargs)
|
---|
596 |
|
---|
597 | def values(self, *args, **kwargs):
|
---|
598 | - return self.get_query_set().values(*args, **kwargs)
|
---|
599 | + return self.get_queryset().values(*args, **kwargs)
|
---|
600 |
|
---|
601 | def values_list(self, *args, **kwargs):
|
---|
602 | - return self.get_query_set().values_list(*args, **kwargs)
|
---|
603 | + return self.get_queryset().values_list(*args, **kwargs)
|
---|
604 |
|
---|
605 | def update(self, *args, **kwargs):
|
---|
606 | - return self.get_query_set().update(*args, **kwargs)
|
---|
607 | + return self.get_queryset().update(*args, **kwargs)
|
---|
608 |
|
---|
609 | def reverse(self, *args, **kwargs):
|
---|
610 | - return self.get_query_set().reverse(*args, **kwargs)
|
---|
611 | + return self.get_queryset().reverse(*args, **kwargs)
|
---|
612 |
|
---|
613 | def defer(self, *args, **kwargs):
|
---|
614 | - return self.get_query_set().defer(*args, **kwargs)
|
---|
615 | + return self.get_queryset().defer(*args, **kwargs)
|
---|
616 |
|
---|
617 | def only(self, *args, **kwargs):
|
---|
618 | - return self.get_query_set().only(*args, **kwargs)
|
---|
619 | + return self.get_queryset().only(*args, **kwargs)
|
---|
620 |
|
---|
621 | def using(self, *args, **kwargs):
|
---|
622 | - return self.get_query_set().using(*args, **kwargs)
|
---|
623 | + return self.get_queryset().using(*args, **kwargs)
|
---|
624 |
|
---|
625 | def exists(self, *args, **kwargs):
|
---|
626 | - return self.get_query_set().exists(*args, **kwargs)
|
---|
627 | + return self.get_queryset().exists(*args, **kwargs)
|
---|
628 |
|
---|
629 | def _insert(self, objs, fields, **kwargs):
|
---|
630 | return insert_query(self.model, objs, fields, **kwargs)
|
---|
631 |
|
---|
632 | def _update(self, values, **kwargs):
|
---|
633 | - return self.get_query_set()._update(values, **kwargs)
|
---|
634 | + return self.get_queryset()._update(values, **kwargs)
|
---|
635 |
|
---|
636 | def raw(self, raw_query, params=None, *args, **kwargs):
|
---|
637 | return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
|
---|
638 | @@ -262,5 +264,5 @@ class EmptyManager(Manager):
|
---|
639 | super(EmptyManager, self).__init__()
|
---|
640 | self.model = model
|
---|
641 |
|
---|
642 | - def get_query_set(self):
|
---|
643 | - return super(EmptyManager, self).get_query_set().none()
|
---|
644 | + def get_queryset(self):
|
---|
645 | + return super(EmptyManager, self).get_queryset().none()
|
---|
646 | diff --git a/django/forms/models.py b/django/forms/models.py
|
---|
647 | index e2d739f..3948780 100644
|
---|
648 | --- a/django/forms/models.py
|
---|
649 | +++ b/django/forms/models.py
|
---|
650 | @@ -479,7 +479,7 @@ class BaseModelFormSet(BaseFormSet):
|
---|
651 | if self.queryset is not None:
|
---|
652 | qs = self.queryset
|
---|
653 | else:
|
---|
654 | - qs = self.model._default_manager.get_query_set()
|
---|
655 | + qs = self.model._default_manager.get_queryset()
|
---|
656 |
|
---|
657 | # If the queryset isn't already ordered we need to add an
|
---|
658 | # artificial ordering here to make sure that all formsets
|
---|
659 | @@ -674,9 +674,9 @@ class BaseModelFormSet(BaseFormSet):
|
---|
660 | except IndexError:
|
---|
661 | pk_value = None
|
---|
662 | if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
|
---|
663 | - qs = pk.rel.to._default_manager.get_query_set()
|
---|
664 | + qs = pk.rel.to._default_manager.get_queryset()
|
---|
665 | else:
|
---|
666 | - qs = self.model._default_manager.get_query_set()
|
---|
667 | + qs = self.model._default_manager.get_queryset()
|
---|
668 | qs = qs.using(form.instance._state.db)
|
---|
669 | if form._meta.widgets:
|
---|
670 | widget = form._meta.widgets.get(self._pk_field.name, HiddenInput)
|
---|
671 | diff --git a/django/utils/deprecation.py b/django/utils/deprecation.py
|
---|
672 | new file mode 100644
|
---|
673 | index 0000000..96cefb4
|
---|
674 | --- /dev/null
|
---|
675 | +++ b/django/utils/deprecation.py
|
---|
676 | @@ -0,0 +1,57 @@
|
---|
677 | +from __future__ import unicode_literals
|
---|
678 | +import warnings
|
---|
679 | +
|
---|
680 | +from django.core.exceptions import ImproperlyConfigured
|
---|
681 | +from django.utils.unittest.compatibility import wraps
|
---|
682 | +
|
---|
683 | +
|
---|
684 | +def renamed_method_factory(old, new, warning=PendingDeprecationWarning):
|
---|
685 | + """
|
---|
686 | + Create a type to handle the deprecation path of a renamed method.
|
---|
687 | +
|
---|
688 | + Does the following:
|
---|
689 | + 1) Issue a warning on class creation if `old` is defined.
|
---|
690 | + 2) Raise an `ImproperlyConfigured` error if both `old` and
|
---|
691 | + `new` are defined.
|
---|
692 | + 3) Define a `new` method if not present.
|
---|
693 | + 4) Define or wrap the existing `old` to complain when called.
|
---|
694 | + """
|
---|
695 | + def renamed_method_complain(name, deprecated):
|
---|
696 | + @wraps(deprecated)
|
---|
697 | + def complain(*args, **kwargs):
|
---|
698 | + warnings.warn(
|
---|
699 | + "`%s.%s` is deprecated, use "
|
---|
700 | + "`%s` instead." % (name, old, new),
|
---|
701 | + warning, 2)
|
---|
702 | + return deprecated(*args, **kwargs)
|
---|
703 | + return complain
|
---|
704 | + class RenamedMethod(type):
|
---|
705 | + def __new__(cls, name, bases, attrs):
|
---|
706 | + deprecated = attrs.get(old)
|
---|
707 | + renamed = attrs.get(new)
|
---|
708 | + if deprecated:
|
---|
709 | + if renamed:
|
---|
710 | + raise ImproperlyConfigured(
|
---|
711 | + "'Class `%s` should either define `%s` or "
|
---|
712 | + "`%s` not both.'" % (name, new, old))
|
---|
713 | + else:
|
---|
714 | + attrs[new] = deprecated
|
---|
715 | + warnings.warn(
|
---|
716 | + "`%s.%s` method should be "
|
---|
717 | + "renamed `%s`." % (name, old, new),
|
---|
718 | + warning, 2)
|
---|
719 | + deprecated = renamed_method_complain(name, deprecated)
|
---|
720 | + elif renamed:
|
---|
721 | + deprecated = renamed_method_complain(name, renamed)
|
---|
722 | + if deprecated:
|
---|
723 | + attrs[old] = deprecated
|
---|
724 | + type_ = type.__new__(cls, name, bases, attrs)
|
---|
725 | + # TODO: Handle type_.__mro__ to look for possible mixins
|
---|
726 | + return type_
|
---|
727 | + return RenamedMethod
|
---|
728 | +
|
---|
729 | +
|
---|
730 | +# See #15363 for more details.
|
---|
731 | +DeprecatedGetQuerySet = renamed_method_factory('get_query_set', 'get_queryset')
|
---|
732 | +#DeprecatedGetPrefetchQuerySet = renamed_method_factory('get_prefetch_query_set', 'get_prefetch_queryset')
|
---|
733 | +#DeprecatedQueryset = renamed_method_factory('queryset', 'get_queryset')
|
---|
734 | diff --git a/tests/modeltests/custom_managers/models.py b/tests/modeltests/custom_managers/models.py
|
---|
735 | index de7c177..2f5e62f 100644
|
---|
736 | --- a/tests/modeltests/custom_managers/models.py
|
---|
737 | +++ b/tests/modeltests/custom_managers/models.py
|
---|
738 | @@ -30,11 +30,11 @@ class Person(models.Model):
|
---|
739 | def __str__(self):
|
---|
740 | return "%s %s" % (self.first_name, self.last_name)
|
---|
741 |
|
---|
742 | -# An example of a custom manager that sets get_query_set().
|
---|
743 | +# An example of a custom manager that sets get_queryset().
|
---|
744 |
|
---|
745 | class PublishedBookManager(models.Manager):
|
---|
746 | - def get_query_set(self):
|
---|
747 | - return super(PublishedBookManager, self).get_query_set().filter(is_published=True)
|
---|
748 | + def get_queryset(self):
|
---|
749 | + return super(PublishedBookManager, self).get_queryset().filter(is_published=True)
|
---|
750 |
|
---|
751 | @python_2_unicode_compatible
|
---|
752 | class Book(models.Model):
|
---|
753 | @@ -50,8 +50,8 @@ class Book(models.Model):
|
---|
754 | # An example of providing multiple custom managers.
|
---|
755 |
|
---|
756 | class FastCarManager(models.Manager):
|
---|
757 | - def get_query_set(self):
|
---|
758 | - return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150)
|
---|
759 | + def get_queryset(self):
|
---|
760 | + return super(FastCarManager, self).get_queryset().filter(top_speed__gt=150)
|
---|
761 |
|
---|
762 | @python_2_unicode_compatible
|
---|
763 | class Car(models.Model):
|
---|
764 | diff --git a/tests/modeltests/fixtures/models.py b/tests/modeltests/fixtures/models.py
|
---|
765 | index 8bd3501..976716f 100644
|
---|
766 | --- a/tests/modeltests/fixtures/models.py
|
---|
767 | +++ b/tests/modeltests/fixtures/models.py
|
---|
768 | @@ -78,8 +78,8 @@ class Person(models.Model):
|
---|
769 | return (self.name,)
|
---|
770 |
|
---|
771 | class SpyManager(PersonManager):
|
---|
772 | - def get_query_set(self):
|
---|
773 | - return super(SpyManager, self).get_query_set().filter(cover_blown=False)
|
---|
774 | + def get_queryset(self):
|
---|
775 | + return super(SpyManager, self).get_queryset().filter(cover_blown=False)
|
---|
776 |
|
---|
777 | class Spy(Person):
|
---|
778 | objects = SpyManager()
|
---|
779 | diff --git a/tests/modeltests/generic_relations/models.py b/tests/modeltests/generic_relations/models.py
|
---|
780 | index 18d7623..34dc8d3 100644
|
---|
781 | --- a/tests/modeltests/generic_relations/models.py
|
---|
782 | +++ b/tests/modeltests/generic_relations/models.py
|
---|
783 | @@ -88,8 +88,8 @@ class Mineral(models.Model):
|
---|
784 | return self.name
|
---|
785 |
|
---|
786 | class GeckoManager(models.Manager):
|
---|
787 | - def get_query_set(self):
|
---|
788 | - return super(GeckoManager, self).get_query_set().filter(has_tail=True)
|
---|
789 | + def get_queryset(self):
|
---|
790 | + return super(GeckoManager, self).get_queryset().filter(has_tail=True)
|
---|
791 |
|
---|
792 | class Gecko(models.Model):
|
---|
793 | has_tail = models.BooleanField()
|
---|
794 | diff --git a/tests/modeltests/get_object_or_404/models.py b/tests/modeltests/get_object_or_404/models.py
|
---|
795 | index bda0605..bb9aa60 100644
|
---|
796 | --- a/tests/modeltests/get_object_or_404/models.py
|
---|
797 | +++ b/tests/modeltests/get_object_or_404/models.py
|
---|
798 | @@ -22,8 +22,8 @@ class Author(models.Model):
|
---|
799 | return self.name
|
---|
800 |
|
---|
801 | class ArticleManager(models.Manager):
|
---|
802 | - def get_query_set(self):
|
---|
803 | - return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
|
---|
804 | + def get_queryset(self):
|
---|
805 | + return super(ArticleManager, self).get_queryset().filter(authors__name__icontains='sir')
|
---|
806 |
|
---|
807 | @python_2_unicode_compatible
|
---|
808 | class Article(models.Model):
|
---|
809 | diff --git a/tests/modeltests/prefetch_related/models.py b/tests/modeltests/prefetch_related/models.py
|
---|
810 | index e58997d..81c5698 100644
|
---|
811 | --- a/tests/modeltests/prefetch_related/models.py
|
---|
812 | +++ b/tests/modeltests/prefetch_related/models.py
|
---|
813 | @@ -87,8 +87,8 @@ class Qualification(models.Model):
|
---|
814 |
|
---|
815 |
|
---|
816 | class TeacherManager(models.Manager):
|
---|
817 | - def get_query_set(self):
|
---|
818 | - return super(TeacherManager, self).get_query_set().prefetch_related('qualifications')
|
---|
819 | + def get_queryset(self):
|
---|
820 | + return super(TeacherManager, self).get_queryset().prefetch_related('qualifications')
|
---|
821 |
|
---|
822 |
|
---|
823 | @python_2_unicode_compatible
|
---|
824 | diff --git a/tests/modeltests/proxy_models/models.py b/tests/modeltests/proxy_models/models.py
|
---|
825 | index 6c962aa..ffb3665 100644
|
---|
826 | --- a/tests/modeltests/proxy_models/models.py
|
---|
827 | +++ b/tests/modeltests/proxy_models/models.py
|
---|
828 | @@ -10,12 +10,12 @@ from django.utils.encoding import python_2_unicode_compatible
|
---|
829 | # A couple of managers for testing managing overriding in proxy model cases.
|
---|
830 |
|
---|
831 | class PersonManager(models.Manager):
|
---|
832 | - def get_query_set(self):
|
---|
833 | - return super(PersonManager, self).get_query_set().exclude(name="fred")
|
---|
834 | + def get_queryset(self):
|
---|
835 | + return super(PersonManager, self).get_queryset().exclude(name="fred")
|
---|
836 |
|
---|
837 | class SubManager(models.Manager):
|
---|
838 | - def get_query_set(self):
|
---|
839 | - return super(SubManager, self).get_query_set().exclude(name="wilma")
|
---|
840 | + def get_queryset(self):
|
---|
841 | + return super(SubManager, self).get_queryset().exclude(name="wilma")
|
---|
842 |
|
---|
843 | @python_2_unicode_compatible
|
---|
844 | class Person(models.Model):
|
---|
845 | diff --git a/tests/regressiontests/admin_changelist/models.py b/tests/regressiontests/admin_changelist/models.py
|
---|
846 | index 4ba2f9c..786b438 100644
|
---|
847 | --- a/tests/regressiontests/admin_changelist/models.py
|
---|
848 | +++ b/tests/regressiontests/admin_changelist/models.py
|
---|
849 | @@ -74,8 +74,8 @@ class UnorderedObject(models.Model):
|
---|
850 |
|
---|
851 |
|
---|
852 | class OrderedObjectManager(models.Manager):
|
---|
853 | - def get_query_set(self):
|
---|
854 | - return super(OrderedObjectManager, self).get_query_set().order_by('number')
|
---|
855 | + def get_queryset(self):
|
---|
856 | + return super(OrderedObjectManager, self).get_queryset().order_by('number')
|
---|
857 |
|
---|
858 | class OrderedObject(models.Model):
|
---|
859 | """
|
---|
860 | diff --git a/tests/regressiontests/admin_changelist/tests.py b/tests/regressiontests/admin_changelist/tests.py
|
---|
861 | index 7a3a5c0..2f94cc7 100644
|
---|
862 | --- a/tests/regressiontests/admin_changelist/tests.py
|
---|
863 | +++ b/tests/regressiontests/admin_changelist/tests.py
|
---|
864 | @@ -39,7 +39,7 @@ class ChangeListTests(TestCase):
|
---|
865 |
|
---|
866 | def test_select_related_preserved(self):
|
---|
867 | """
|
---|
868 | - Regression test for #10348: ChangeList.get_query_set() shouldn't
|
---|
869 | + Regression test for #10348: ChangeList.get_queryset() shouldn't
|
---|
870 | overwrite a custom select_related provided by ModelAdmin.queryset().
|
---|
871 | """
|
---|
872 | m = ChildAdmin(Child, admin.site)
|
---|
873 | diff --git a/tests/regressiontests/admin_filters/tests.py b/tests/regressiontests/admin_filters/tests.py
|
---|
874 | index 11f792e..d25c8f4 100644
|
---|
875 | --- a/tests/regressiontests/admin_filters/tests.py
|
---|
876 | +++ b/tests/regressiontests/admin_filters/tests.py
|
---|
877 | @@ -183,7 +183,7 @@ class ListFiltersTests(TestCase):
|
---|
878 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
879 |
|
---|
880 | # Make sure the correct queryset is returned
|
---|
881 | - queryset = changelist.get_query_set(request)
|
---|
882 | + queryset = changelist.get_queryset(request)
|
---|
883 | self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book])
|
---|
884 |
|
---|
885 | # Make sure the correct choice is selected
|
---|
886 | @@ -200,7 +200,7 @@ class ListFiltersTests(TestCase):
|
---|
887 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
888 |
|
---|
889 | # Make sure the correct queryset is returned
|
---|
890 | - queryset = changelist.get_query_set(request)
|
---|
891 | + queryset = changelist.get_queryset(request)
|
---|
892 | if (self.today.year, self.today.month) == (self.one_week_ago.year, self.one_week_ago.month):
|
---|
893 | # In case one week ago is in the same month.
|
---|
894 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
---|
895 | @@ -221,7 +221,7 @@ class ListFiltersTests(TestCase):
|
---|
896 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
897 |
|
---|
898 | # Make sure the correct queryset is returned
|
---|
899 | - queryset = changelist.get_query_set(request)
|
---|
900 | + queryset = changelist.get_queryset(request)
|
---|
901 | if self.today.year == self.one_week_ago.year:
|
---|
902 | # In case one week ago is in the same year.
|
---|
903 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
---|
904 | @@ -242,7 +242,7 @@ class ListFiltersTests(TestCase):
|
---|
905 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
906 |
|
---|
907 | # Make sure the correct queryset is returned
|
---|
908 | - queryset = changelist.get_query_set(request)
|
---|
909 | + queryset = changelist.get_queryset(request)
|
---|
910 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
---|
911 |
|
---|
912 | # Make sure the correct choice is selected
|
---|
913 | @@ -266,7 +266,7 @@ class ListFiltersTests(TestCase):
|
---|
914 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
915 |
|
---|
916 | # Make sure the correct queryset is returned
|
---|
917 | - queryset = changelist.get_query_set(request)
|
---|
918 | + queryset = changelist.get_queryset(request)
|
---|
919 | self.assertEqual(list(queryset), [self.django_book])
|
---|
920 |
|
---|
921 | # Make sure the last choice is None and is selected
|
---|
922 | @@ -293,7 +293,7 @@ class ListFiltersTests(TestCase):
|
---|
923 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
924 |
|
---|
925 | # Make sure the correct queryset is returned
|
---|
926 | - queryset = changelist.get_query_set(request)
|
---|
927 | + queryset = changelist.get_queryset(request)
|
---|
928 | self.assertEqual(list(queryset), [self.gipsy_book])
|
---|
929 |
|
---|
930 | # Make sure the last choice is None and is selected
|
---|
931 | @@ -321,7 +321,7 @@ class ListFiltersTests(TestCase):
|
---|
932 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
933 |
|
---|
934 | # Make sure the correct queryset is returned
|
---|
935 | - queryset = changelist.get_query_set(request)
|
---|
936 | + queryset = changelist.get_queryset(request)
|
---|
937 | self.assertEqual(list(queryset), [self.django_book, self.bio_book, self.djangonaut_book])
|
---|
938 |
|
---|
939 | # Make sure the last choice is None and is selected
|
---|
940 | @@ -349,7 +349,7 @@ class ListFiltersTests(TestCase):
|
---|
941 | changelist = self.get_changelist(request, User, modeladmin)
|
---|
942 |
|
---|
943 | # Make sure the correct queryset is returned
|
---|
944 | - queryset = changelist.get_query_set(request)
|
---|
945 | + queryset = changelist.get_queryset(request)
|
---|
946 | self.assertEqual(list(queryset), [self.lisa])
|
---|
947 |
|
---|
948 | # Make sure the last choice is None and is selected
|
---|
949 | @@ -374,7 +374,7 @@ class ListFiltersTests(TestCase):
|
---|
950 | changelist = self.get_changelist(request, User, modeladmin)
|
---|
951 |
|
---|
952 | # Make sure the correct queryset is returned
|
---|
953 | - queryset = changelist.get_query_set(request)
|
---|
954 | + queryset = changelist.get_queryset(request)
|
---|
955 | self.assertEqual(list(queryset), [self.alfred])
|
---|
956 |
|
---|
957 | # Make sure the last choice is None and is selected
|
---|
958 | @@ -410,7 +410,7 @@ class ListFiltersTests(TestCase):
|
---|
959 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
960 |
|
---|
961 | # Make sure the correct queryset is returned
|
---|
962 | - queryset = changelist.get_query_set(request)
|
---|
963 | + queryset = changelist.get_queryset(request)
|
---|
964 | self.assertEqual(list(queryset), [self.bio_book])
|
---|
965 |
|
---|
966 | # Make sure the correct choice is selected
|
---|
967 | @@ -424,7 +424,7 @@ class ListFiltersTests(TestCase):
|
---|
968 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
969 |
|
---|
970 | # Make sure the correct queryset is returned
|
---|
971 | - queryset = changelist.get_query_set(request)
|
---|
972 | + queryset = changelist.get_queryset(request)
|
---|
973 | self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
|
---|
974 |
|
---|
975 | # Make sure the correct choice is selected
|
---|
976 | @@ -438,7 +438,7 @@ class ListFiltersTests(TestCase):
|
---|
977 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
978 |
|
---|
979 | # Make sure the correct queryset is returned
|
---|
980 | - queryset = changelist.get_query_set(request)
|
---|
981 | + queryset = changelist.get_queryset(request)
|
---|
982 | self.assertEqual(list(queryset), [self.django_book])
|
---|
983 |
|
---|
984 | # Make sure the correct choice is selected
|
---|
985 | @@ -457,7 +457,7 @@ class ListFiltersTests(TestCase):
|
---|
986 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
987 |
|
---|
988 | # Make sure the correct queryset is returned
|
---|
989 | - queryset = changelist.get_query_set(request)
|
---|
990 | + queryset = changelist.get_queryset(request)
|
---|
991 | self.assertEqual(list(queryset), list(Book.objects.all().order_by('-id')))
|
---|
992 |
|
---|
993 | # Make sure the correct choice is selected
|
---|
994 | @@ -474,7 +474,7 @@ class ListFiltersTests(TestCase):
|
---|
995 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
996 |
|
---|
997 | # Make sure the correct queryset is returned
|
---|
998 | - queryset = changelist.get_query_set(request)
|
---|
999 | + queryset = changelist.get_queryset(request)
|
---|
1000 | self.assertEqual(list(queryset), [])
|
---|
1001 |
|
---|
1002 | # Make sure the correct choice is selected
|
---|
1003 | @@ -491,7 +491,7 @@ class ListFiltersTests(TestCase):
|
---|
1004 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1005 |
|
---|
1006 | # Make sure the correct queryset is returned
|
---|
1007 | - queryset = changelist.get_query_set(request)
|
---|
1008 | + queryset = changelist.get_queryset(request)
|
---|
1009 | self.assertEqual(list(queryset), [self.bio_book])
|
---|
1010 |
|
---|
1011 | # Make sure the correct choice is selected
|
---|
1012 | @@ -508,7 +508,7 @@ class ListFiltersTests(TestCase):
|
---|
1013 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1014 |
|
---|
1015 | # Make sure the correct queryset is returned
|
---|
1016 | - queryset = changelist.get_query_set(request)
|
---|
1017 | + queryset = changelist.get_queryset(request)
|
---|
1018 | self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
|
---|
1019 |
|
---|
1020 | # Make sure the correct choice is selected
|
---|
1021 | @@ -525,7 +525,7 @@ class ListFiltersTests(TestCase):
|
---|
1022 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1023 |
|
---|
1024 | # Make sure the correct queryset is returned
|
---|
1025 | - queryset = changelist.get_query_set(request)
|
---|
1026 | + queryset = changelist.get_queryset(request)
|
---|
1027 | self.assertEqual(list(queryset), [self.djangonaut_book])
|
---|
1028 |
|
---|
1029 | # Make sure the correct choices are selected
|
---|
1030 | @@ -615,7 +615,7 @@ class ListFiltersTests(TestCase):
|
---|
1031 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1032 |
|
---|
1033 | # Make sure the correct queryset is returned
|
---|
1034 | - queryset = changelist.get_query_set(request)
|
---|
1035 | + queryset = changelist.get_queryset(request)
|
---|
1036 | self.assertEqual(list(queryset), [self.bio_book])
|
---|
1037 |
|
---|
1038 | filterspec = changelist.get_filters(request)[0][-1]
|
---|
1039 | @@ -637,7 +637,7 @@ class ListFiltersTests(TestCase):
|
---|
1040 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1041 |
|
---|
1042 | # Make sure the correct queryset is returned
|
---|
1043 | - queryset = changelist.get_query_set(request)
|
---|
1044 | + queryset = changelist.get_queryset(request)
|
---|
1045 | self.assertEqual(list(queryset), [self.bio_book])
|
---|
1046 |
|
---|
1047 | # Make sure the correct choice is selected
|
---|
1048 | @@ -654,7 +654,7 @@ class ListFiltersTests(TestCase):
|
---|
1049 | changelist = self.get_changelist(request, Book, modeladmin)
|
---|
1050 |
|
---|
1051 | # Make sure the correct queryset is returned
|
---|
1052 | - queryset = changelist.get_query_set(request)
|
---|
1053 | + queryset = changelist.get_queryset(request)
|
---|
1054 | self.assertEqual(list(queryset), [self.bio_book])
|
---|
1055 |
|
---|
1056 | # Make sure the correct choice is selected
|
---|
1057 | @@ -676,7 +676,7 @@ class ListFiltersTests(TestCase):
|
---|
1058 | request = self.request_factory.get('/', {'department': self.john.pk})
|
---|
1059 | changelist = self.get_changelist(request, Employee, modeladmin)
|
---|
1060 |
|
---|
1061 | - queryset = changelist.get_query_set(request)
|
---|
1062 | + queryset = changelist.get_queryset(request)
|
---|
1063 |
|
---|
1064 | self.assertEqual(list(queryset), [self.john])
|
---|
1065 |
|
---|
1066 | @@ -698,7 +698,7 @@ class ListFiltersTests(TestCase):
|
---|
1067 | changelist = self.get_changelist(request, Employee, modeladmin)
|
---|
1068 |
|
---|
1069 | # Make sure the correct queryset is returned
|
---|
1070 | - queryset = changelist.get_query_set(request)
|
---|
1071 | + queryset = changelist.get_queryset(request)
|
---|
1072 | self.assertEqual(list(queryset), [self.jack, self.john])
|
---|
1073 |
|
---|
1074 | filterspec = changelist.get_filters(request)[0][-1]
|
---|
1075 | @@ -723,7 +723,7 @@ class ListFiltersTests(TestCase):
|
---|
1076 | changelist = self.get_changelist(request, Employee, modeladmin)
|
---|
1077 |
|
---|
1078 | # Make sure the correct queryset is returned
|
---|
1079 | - queryset = changelist.get_query_set(request)
|
---|
1080 | + queryset = changelist.get_queryset(request)
|
---|
1081 | self.assertEqual(list(queryset), [self.john])
|
---|
1082 |
|
---|
1083 | filterspec = changelist.get_filters(request)[0][-1]
|
---|
1084 | diff --git a/tests/regressiontests/admin_views/admin.py b/tests/regressiontests/admin_views/admin.py
|
---|
1085 | index 435883e..2d85e54 100644
|
---|
1086 | --- a/tests/regressiontests/admin_views/admin.py
|
---|
1087 | +++ b/tests/regressiontests/admin_views/admin.py
|
---|
1088 | @@ -417,7 +417,7 @@ class PostAdmin(admin.ModelAdmin):
|
---|
1089 |
|
---|
1090 |
|
---|
1091 | class CustomChangeList(ChangeList):
|
---|
1092 | - def get_query_set(self, request):
|
---|
1093 | + def get_queryset(self, request):
|
---|
1094 | return self.root_query_set.filter(pk=9999) # Does not exist
|
---|
1095 |
|
---|
1096 |
|
---|
1097 | diff --git a/tests/regressiontests/admin_widgets/models.py b/tests/regressiontests/admin_widgets/models.py
|
---|
1098 | index 2977b86..ae19d58 100644
|
---|
1099 | --- a/tests/regressiontests/admin_widgets/models.py
|
---|
1100 | +++ b/tests/regressiontests/admin_widgets/models.py
|
---|
1101 | @@ -37,8 +37,8 @@ class Album(models.Model):
|
---|
1102 | return self.name
|
---|
1103 |
|
---|
1104 | class HiddenInventoryManager(models.Manager):
|
---|
1105 | - def get_query_set(self):
|
---|
1106 | - return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
|
---|
1107 | + def get_queryset(self):
|
---|
1108 | + return super(HiddenInventoryManager, self).get_queryset().filter(hidden=False)
|
---|
1109 |
|
---|
1110 | @python_2_unicode_compatible
|
---|
1111 | class Inventory(models.Model):
|
---|
1112 | diff --git a/tests/regressiontests/custom_managers_regress/models.py b/tests/regressiontests/custom_managers_regress/models.py
|
---|
1113 | index 71073f0..95cf6e8 100644
|
---|
1114 | --- a/tests/regressiontests/custom_managers_regress/models.py
|
---|
1115 | +++ b/tests/regressiontests/custom_managers_regress/models.py
|
---|
1116 | @@ -10,8 +10,8 @@ class RestrictedManager(models.Manager):
|
---|
1117 | """
|
---|
1118 | A manager that filters out non-public instances.
|
---|
1119 | """
|
---|
1120 | - def get_query_set(self):
|
---|
1121 | - return super(RestrictedManager, self).get_query_set().filter(is_public=True)
|
---|
1122 | + def get_queryset(self):
|
---|
1123 | + return super(RestrictedManager, self).get_queryset().filter(is_public=True)
|
---|
1124 |
|
---|
1125 | @python_2_unicode_compatible
|
---|
1126 | class RelatedModel(models.Model):
|
---|
1127 | diff --git a/tests/regressiontests/deprecation/__init__.py b/tests/regressiontests/deprecation/__init__.py
|
---|
1128 | new file mode 100644
|
---|
1129 | index 0000000..e69de29
|
---|
1130 | diff --git a/tests/regressiontests/deprecation/models.py b/tests/regressiontests/deprecation/models.py
|
---|
1131 | new file mode 100644
|
---|
1132 | index 0000000..e69de29
|
---|
1133 | diff --git a/tests/regressiontests/deprecation/tests.py b/tests/regressiontests/deprecation/tests.py
|
---|
1134 | new file mode 100644
|
---|
1135 | index 0000000..32d5a8a
|
---|
1136 | --- /dev/null
|
---|
1137 | +++ b/tests/regressiontests/deprecation/tests.py
|
---|
1138 | @@ -0,0 +1,130 @@
|
---|
1139 | +from __future__ import unicode_literals
|
---|
1140 | +import warnings
|
---|
1141 | +
|
---|
1142 | +from django.test.testcases import SimpleTestCase
|
---|
1143 | +from django.utils import six
|
---|
1144 | +from django.utils.deprecation import renamed_method_factory
|
---|
1145 | +from django.core.exceptions import ImproperlyConfigured
|
---|
1146 | +
|
---|
1147 | +
|
---|
1148 | +RenamedMethod = renamed_method_factory('old', 'new')
|
---|
1149 | +
|
---|
1150 | +
|
---|
1151 | +class RenamedMethodTest(SimpleTestCase):
|
---|
1152 | + def test_class_definition_warnings(self):
|
---|
1153 | + """
|
---|
1154 | + Ensure a warning is raised upon class definition to suggest renaming
|
---|
1155 | + the faulty method.
|
---|
1156 | + """
|
---|
1157 | + with warnings.catch_warnings(record=True) as recorded:
|
---|
1158 | + warnings.simplefilter('always')
|
---|
1159 | + class Manager(six.with_metaclass(RenamedMethod)):
|
---|
1160 | + def old(self):
|
---|
1161 | + pass
|
---|
1162 | + self.assertEqual(len(recorded), 1)
|
---|
1163 | + msg = str(recorded[0].message)
|
---|
1164 | + self.assertEqual(msg,
|
---|
1165 | + '`Manager.old` method should be renamed `new`.')
|
---|
1166 | +
|
---|
1167 | + def test_new_defined(self):
|
---|
1168 | + """
|
---|
1169 | + Ensure `old` complains and not `new` when only
|
---|
1170 | + `new` is defined.
|
---|
1171 | + """
|
---|
1172 | + with warnings.catch_warnings(record=True) as recorded:
|
---|
1173 | + warnings.simplefilter('ignore')
|
---|
1174 | + class Manager(six.with_metaclass(RenamedMethod)):
|
---|
1175 | + def new(self):
|
---|
1176 | + pass
|
---|
1177 | + warnings.simplefilter('always')
|
---|
1178 | + manager = Manager()
|
---|
1179 | + manager.new()
|
---|
1180 | + self.assertEqual(len(recorded), 0)
|
---|
1181 | + manager.old()
|
---|
1182 | + self.assertEqual(len(recorded), 1)
|
---|
1183 | + msg = str(recorded.pop().message)
|
---|
1184 | + self.assertEqual(msg,
|
---|
1185 | + '`Manager.old` is deprecated, use `new` instead.')
|
---|
1186 | +
|
---|
1187 | + def test_old_defined(self):
|
---|
1188 | + """
|
---|
1189 | + Ensure `old` complains and not `new` when only
|
---|
1190 | + `old` is defined.
|
---|
1191 | + """
|
---|
1192 | + with warnings.catch_warnings(record=True) as recorded:
|
---|
1193 | + warnings.simplefilter('ignore')
|
---|
1194 | + class Manager(six.with_metaclass(RenamedMethod)):
|
---|
1195 | + def old(self):
|
---|
1196 | + pass
|
---|
1197 | + warnings.simplefilter('always')
|
---|
1198 | + manager = Manager()
|
---|
1199 | + manager.new()
|
---|
1200 | + self.assertEqual(len(recorded), 0)
|
---|
1201 | + manager.old()
|
---|
1202 | + self.assertEqual(len(recorded), 1)
|
---|
1203 | + msg = str(recorded.pop().message)
|
---|
1204 | + self.assertEqual(msg,
|
---|
1205 | + '`Manager.old` is deprecated, use `new` instead.')
|
---|
1206 | +
|
---|
1207 | + def test_deprecated_subclass_renamed(self):
|
---|
1208 | + """
|
---|
1209 | + Ensure the correct warnings are raised when a class that didn't rename
|
---|
1210 | + `old` subclass one that did.
|
---|
1211 | + """
|
---|
1212 | + with warnings.catch_warnings(record=True) as recorded:
|
---|
1213 | + warnings.simplefilter('ignore')
|
---|
1214 | + class Renamed(six.with_metaclass(RenamedMethod)):
|
---|
1215 | + def new(self):
|
---|
1216 | + pass
|
---|
1217 | + class Deprecated(Renamed):
|
---|
1218 | + def old(self):
|
---|
1219 | + super(Deprecated, self).old()
|
---|
1220 | + warnings.simplefilter('always')
|
---|
1221 | + deprecated = Deprecated()
|
---|
1222 | + deprecated.new()
|
---|
1223 | + self.assertEqual(len(recorded), 1)
|
---|
1224 | + msg = str(recorded.pop().message)
|
---|
1225 | + self.assertEqual(msg,
|
---|
1226 | + '`Renamed.old` is deprecated, use `new` instead.')
|
---|
1227 | + deprecated.old()
|
---|
1228 | + self.assertEqual(len(recorded), 2)
|
---|
1229 | + msgs = [str(warning.message) for warning in recorded]
|
---|
1230 | + self.assertEqual(msgs, [
|
---|
1231 | + '`Deprecated.old` is deprecated, use `new` instead.',
|
---|
1232 | + '`Renamed.old` is deprecated, use `new` instead.'])
|
---|
1233 | +
|
---|
1234 | + def test_renamed_subclass_deprecated(self):
|
---|
1235 | + """
|
---|
1236 | + Ensure the correct warnings are raised when a class that renamed
|
---|
1237 | + `old` subclass one that didn't.
|
---|
1238 | + """
|
---|
1239 | + with warnings.catch_warnings(record=True) as recorded:
|
---|
1240 | + warnings.simplefilter('ignore')
|
---|
1241 | + class Deprecated(six.with_metaclass(RenamedMethod)):
|
---|
1242 | + def old(self):
|
---|
1243 | + pass
|
---|
1244 | + class Renamed(Deprecated):
|
---|
1245 | + def new(self):
|
---|
1246 | + super(Renamed, self).new()
|
---|
1247 | + warnings.simplefilter('always')
|
---|
1248 | + renamed = Renamed()
|
---|
1249 | + renamed.new()
|
---|
1250 | + self.assertEqual(len(recorded), 0)
|
---|
1251 | + renamed.old()
|
---|
1252 | + self.assertEqual(len(recorded), 1)
|
---|
1253 | + msg = str(recorded.pop().message)
|
---|
1254 | + self.assertEqual(msg,
|
---|
1255 | + '`Renamed.old` is deprecated, use `new` instead.')
|
---|
1256 | +
|
---|
1257 | + def test_improperly_configured(self):
|
---|
1258 | + """
|
---|
1259 | + Ensure a significant `ImproperlyConfigured` error is raised when
|
---|
1260 | + both `new` and `old` are defined.
|
---|
1261 | + """
|
---|
1262 | + msg = 'Class `Manager` should either define `new` or `old` not both.'
|
---|
1263 | + with self.assertRaisesMessage(ImproperlyConfigured, msg):
|
---|
1264 | + class Manager(six.with_metaclass(RenamedMethod)):
|
---|
1265 | + def new(self):
|
---|
1266 | + pass
|
---|
1267 | + def old(self):
|
---|
1268 | + pass
|
---|
1269 | \ No newline at end of file
|
---|
1270 | diff --git a/tests/regressiontests/managers_regress/models.py b/tests/regressiontests/managers_regress/models.py
|
---|
1271 | index d72970d..d8dd22e 100644
|
---|
1272 | --- a/tests/regressiontests/managers_regress/models.py
|
---|
1273 | +++ b/tests/regressiontests/managers_regress/models.py
|
---|
1274 | @@ -7,18 +7,18 @@ from django.utils.encoding import python_2_unicode_compatible
|
---|
1275 |
|
---|
1276 |
|
---|
1277 | class OnlyFred(models.Manager):
|
---|
1278 | - def get_query_set(self):
|
---|
1279 | - return super(OnlyFred, self).get_query_set().filter(name='fred')
|
---|
1280 | + def get_queryset(self):
|
---|
1281 | + return super(OnlyFred, self).get_queryset().filter(name='fred')
|
---|
1282 |
|
---|
1283 |
|
---|
1284 | class OnlyBarney(models.Manager):
|
---|
1285 | - def get_query_set(self):
|
---|
1286 | - return super(OnlyBarney, self).get_query_set().filter(name='barney')
|
---|
1287 | + def get_queryset(self):
|
---|
1288 | + return super(OnlyBarney, self).get_queryset().filter(name='barney')
|
---|
1289 |
|
---|
1290 |
|
---|
1291 | class Value42(models.Manager):
|
---|
1292 | - def get_query_set(self):
|
---|
1293 | - return super(Value42, self).get_query_set().filter(value=42)
|
---|
1294 | + def get_queryset(self):
|
---|
1295 | + return super(Value42, self).get_queryset().filter(value=42)
|
---|
1296 |
|
---|
1297 |
|
---|
1298 | class AbstractBase1(models.Model):
|
---|
1299 | diff --git a/tests/regressiontests/modeladmin/tests.py b/tests/regressiontests/modeladmin/tests.py
|
---|
1300 | index b0a1812..2f3eddd 100644
|
---|
1301 | --- a/tests/regressiontests/modeladmin/tests.py
|
---|
1302 | +++ b/tests/regressiontests/modeladmin/tests.py
|
---|
1303 | @@ -1074,7 +1074,7 @@ class ValidationTests(unittest.TestCase):
|
---|
1304 | return 'awesomeness'
|
---|
1305 | def get_choices(self, request):
|
---|
1306 | return (('bit', 'A bit awesome'), ('very', 'Very awesome'), )
|
---|
1307 | - def get_query_set(self, cl, qs):
|
---|
1308 | + def get_queryset(self, cl, qs):
|
---|
1309 | return qs
|
---|
1310 |
|
---|
1311 | class ValidationTestModelAdmin(ModelAdmin):
|
---|
1312 | diff --git a/tests/regressiontests/queries/models.py b/tests/regressiontests/queries/models.py
|
---|
1313 | index 16583e8..7489aeb 100644
|
---|
1314 | --- a/tests/regressiontests/queries/models.py
|
---|
1315 | +++ b/tests/regressiontests/queries/models.py
|
---|
1316 | @@ -175,8 +175,8 @@ class LoopZ(models.Model):
|
---|
1317 |
|
---|
1318 | # A model and custom default manager combination.
|
---|
1319 | class CustomManager(models.Manager):
|
---|
1320 | - def get_query_set(self):
|
---|
1321 | - qs = super(CustomManager, self).get_query_set()
|
---|
1322 | + def get_queryset(self):
|
---|
1323 | + qs = super(CustomManager, self).get_queryset()
|
---|
1324 | return qs.filter(public=True, tag__name='t1')
|
---|
1325 |
|
---|
1326 | @python_2_unicode_compatible
|
---|
1327 | @@ -196,8 +196,8 @@ class Detail(models.Model):
|
---|
1328 | data = models.CharField(max_length=10)
|
---|
1329 |
|
---|
1330 | class MemberManager(models.Manager):
|
---|
1331 | - def get_query_set(self):
|
---|
1332 | - return super(MemberManager, self).get_query_set().select_related("details")
|
---|
1333 | + def get_queryset(self):
|
---|
1334 | + return super(MemberManager, self).get_queryset().select_related("details")
|
---|
1335 |
|
---|
1336 | class Member(models.Model):
|
---|
1337 | name = models.CharField(max_length=10)
|
---|
1338 | diff --git a/tests/regressiontests/reverse_single_related/models.py b/tests/regressiontests/reverse_single_related/models.py
|
---|
1339 | index 898be84..30ba345 100644
|
---|
1340 | --- a/tests/regressiontests/reverse_single_related/models.py
|
---|
1341 | +++ b/tests/regressiontests/reverse_single_related/models.py
|
---|
1342 | @@ -2,8 +2,8 @@ from django.db import models
|
---|
1343 |
|
---|
1344 |
|
---|
1345 | class SourceManager(models.Manager):
|
---|
1346 | - def get_query_set(self):
|
---|
1347 | - return super(SourceManager, self).get_query_set().filter(is_public=True)
|
---|
1348 | + def get_queryset(self):
|
---|
1349 | + return super(SourceManager, self).get_queryset().filter(is_public=True)
|
---|
1350 |
|
---|
1351 | class Source(models.Model):
|
---|
1352 | is_public = models.BooleanField()
|
---|