| 1 | diff --git a/AUTHORS b/AUTHORS
|
|---|
| 2 | index c603833..0ee3618 100644
|
|---|
| 3 | --- a/AUTHORS
|
|---|
| 4 | +++ b/AUTHORS
|
|---|
| 5 | @@ -98,6 +98,7 @@ answer newbie questions, and generally made Django that much better:
|
|---|
| 6 | Natalia Bidart <nataliabidart@gmail.com>
|
|---|
| 7 | Mark Biggers <biggers@utsl.com>
|
|---|
| 8 | Paul Bissex <http://e-scribe.com/>
|
|---|
| 9 | + Loïc Bistuer <loic.bistuer@gmail.com>
|
|---|
| 10 | Simon Blanchard
|
|---|
| 11 | Craig Blaszczyk <masterjakul@gmail.com>
|
|---|
| 12 | David Blewett <david@dawninglight.net>
|
|---|
| 13 | diff --git a/django/contrib/admin/options.py b/django/contrib/admin/options.py
|
|---|
| 14 | index ff7873b..37b2157 100644
|
|---|
| 15 | --- a/django/contrib/admin/options.py
|
|---|
| 16 | +++ b/django/contrib/admin/options.py
|
|---|
| 17 | @@ -28,6 +28,7 @@ from django.utils.datastructures import SortedDict
|
|---|
| 18 | from django.utils.html import escape, escapejs
|
|---|
| 19 | from django.utils.safestring import mark_safe
|
|---|
| 20 | from django.utils import six
|
|---|
| 21 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 22 | from django.utils.text import capfirst, get_text_list
|
|---|
| 23 | from django.utils.translation import ugettext as _
|
|---|
| 24 | from django.utils.translation import ungettext
|
|---|
| 25 | @@ -63,7 +64,13 @@ FORMFIELD_FOR_DBFIELD_DEFAULTS = {
|
|---|
| 26 | csrf_protect_m = method_decorator(csrf_protect)
|
|---|
| 27 |
|
|---|
| 28 |
|
|---|
| 29 | -class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
|
|---|
| 30 | +class RenameBaseModelAdminMethods(forms.MediaDefiningClass, RenameMethodsBase):
|
|---|
| 31 | + renamed_methods = (
|
|---|
| 32 | + ('queryset', 'get_queryset'),
|
|---|
| 33 | + )
|
|---|
| 34 | +
|
|---|
| 35 | +
|
|---|
| 36 | +class BaseModelAdmin(six.with_metaclass(RenameBaseModelAdminMethods)):
|
|---|
| 37 | """Functionality common to both ModelAdmin and InlineAdmin."""
|
|---|
| 38 |
|
|---|
| 39 | raw_id_fields = ()
|
|---|
| 40 | @@ -217,12 +224,12 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
|
|---|
| 41 | """
|
|---|
| 42 | return self.prepopulated_fields
|
|---|
| 43 |
|
|---|
| 44 | - def queryset(self, request):
|
|---|
| 45 | + def get_queryset(self, request):
|
|---|
| 46 | """
|
|---|
| 47 | Returns a QuerySet of all model instances that can be edited by the
|
|---|
| 48 | admin site. This is used by changelist_view.
|
|---|
| 49 | """
|
|---|
| 50 | - qs = self.model._default_manager.get_query_set()
|
|---|
| 51 | + qs = self.model._default_manager.get_queryset()
|
|---|
| 52 | # TODO: this should be handled by some parameter to the ChangeList.
|
|---|
| 53 | ordering = self.get_ordering(request)
|
|---|
| 54 | if ordering:
|
|---|
| 55 | @@ -474,7 +481,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 56 | returned if no match is found (or the object_id failed validation
|
|---|
| 57 | against the primary key field).
|
|---|
| 58 | """
|
|---|
| 59 | - queryset = self.queryset(request)
|
|---|
| 60 | + queryset = self.get_queryset(request)
|
|---|
| 61 | model = queryset.model
|
|---|
| 62 | try:
|
|---|
| 63 | object_id = model._meta.pk.to_python(object_id)
|
|---|
| 64 | @@ -986,7 +993,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 65 | formset = FormSet(data=request.POST, files=request.FILES,
|
|---|
| 66 | instance=new_object,
|
|---|
| 67 | save_as_new="_saveasnew" in request.POST,
|
|---|
| 68 | - prefix=prefix, queryset=inline.queryset(request))
|
|---|
| 69 | + prefix=prefix, queryset=inline.get_queryset(request))
|
|---|
| 70 | formsets.append(formset)
|
|---|
| 71 | if all_valid(formsets) and form_validated:
|
|---|
| 72 | self.save_model(request, new_object, form, False)
|
|---|
| 73 | @@ -1012,7 +1019,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 74 | if prefixes[prefix] != 1 or not prefix:
|
|---|
| 75 | prefix = "%s-%s" % (prefix, prefixes[prefix])
|
|---|
| 76 | formset = FormSet(instance=self.model(), prefix=prefix,
|
|---|
| 77 | - queryset=inline.queryset(request))
|
|---|
| 78 | + queryset=inline.get_queryset(request))
|
|---|
| 79 | formsets.append(formset)
|
|---|
| 80 |
|
|---|
| 81 | adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
|
|---|
| 82 | @@ -1082,7 +1089,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 83 | prefix = "%s-%s" % (prefix, prefixes[prefix])
|
|---|
| 84 | formset = FormSet(request.POST, request.FILES,
|
|---|
| 85 | instance=new_object, prefix=prefix,
|
|---|
| 86 | - queryset=inline.queryset(request))
|
|---|
| 87 | + queryset=inline.get_queryset(request))
|
|---|
| 88 |
|
|---|
| 89 | formsets.append(formset)
|
|---|
| 90 |
|
|---|
| 91 | @@ -1102,7 +1109,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 92 | if prefixes[prefix] != 1 or not prefix:
|
|---|
| 93 | prefix = "%s-%s" % (prefix, prefixes[prefix])
|
|---|
| 94 | formset = FormSet(instance=obj, prefix=prefix,
|
|---|
| 95 | - queryset=inline.queryset(request))
|
|---|
| 96 | + queryset=inline.get_queryset(request))
|
|---|
| 97 | formsets.append(formset)
|
|---|
| 98 |
|
|---|
| 99 | adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj),
|
|---|
| 100 | @@ -1187,7 +1194,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 101 | if (actions and request.method == 'POST' and
|
|---|
| 102 | 'index' in request.POST and '_save' not in request.POST):
|
|---|
| 103 | if selected:
|
|---|
| 104 | - response = self.response_action(request, queryset=cl.get_query_set(request))
|
|---|
| 105 | + response = self.response_action(request, queryset=cl.get_queryset(request))
|
|---|
| 106 | if response:
|
|---|
| 107 | return response
|
|---|
| 108 | else:
|
|---|
| 109 | @@ -1203,7 +1210,7 @@ class ModelAdmin(BaseModelAdmin):
|
|---|
| 110 | helpers.ACTION_CHECKBOX_NAME in request.POST and
|
|---|
| 111 | 'index' not in request.POST and '_save' not in request.POST):
|
|---|
| 112 | if selected:
|
|---|
| 113 | - response = self.response_action(request, queryset=cl.get_query_set(request))
|
|---|
| 114 | + response = self.response_action(request, queryset=cl.get_queryset(request))
|
|---|
| 115 | if response:
|
|---|
| 116 | return response
|
|---|
| 117 | else:
|
|---|
| 118 | @@ -1462,8 +1469,8 @@ class InlineModelAdmin(BaseModelAdmin):
|
|---|
| 119 | fields = list(form.base_fields) + list(self.get_readonly_fields(request, obj))
|
|---|
| 120 | return [(None, {'fields': fields})]
|
|---|
| 121 |
|
|---|
| 122 | - def queryset(self, request):
|
|---|
| 123 | - queryset = super(InlineModelAdmin, self).queryset(request)
|
|---|
| 124 | + def get_queryset(self, request):
|
|---|
| 125 | + queryset = super(InlineModelAdmin, self).get_queryset(request)
|
|---|
| 126 | if not self.has_change_permission(request):
|
|---|
| 127 | queryset = queryset.none()
|
|---|
| 128 | return queryset
|
|---|
| 129 | diff --git a/django/contrib/admin/views/main.py b/django/contrib/admin/views/main.py
|
|---|
| 130 | index 8bda323..3757436 100644
|
|---|
| 131 | --- a/django/contrib/admin/views/main.py
|
|---|
| 132 | +++ b/django/contrib/admin/views/main.py
|
|---|
| 133 | @@ -6,7 +6,9 @@ from django.core.paginator import InvalidPage
|
|---|
| 134 | from django.core.urlresolvers import reverse
|
|---|
| 135 | from django.db import models
|
|---|
| 136 | from django.db.models.fields import FieldDoesNotExist
|
|---|
| 137 | +from django.utils import six
|
|---|
| 138 | from django.utils.datastructures import SortedDict
|
|---|
| 139 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 140 | from django.utils.encoding import force_str, force_text
|
|---|
| 141 | from django.utils.translation import ugettext, ugettext_lazy
|
|---|
| 142 | from django.utils.http import urlencode
|
|---|
| 143 | @@ -33,14 +35,20 @@ IGNORED_PARAMS = (
|
|---|
| 144 | EMPTY_CHANGELIST_VALUE = ugettext_lazy('(None)')
|
|---|
| 145 |
|
|---|
| 146 |
|
|---|
| 147 | -class ChangeList(object):
|
|---|
| 148 | +class RenameChangeListMethods(RenameMethodsBase):
|
|---|
| 149 | + renamed_methods = (
|
|---|
| 150 | + ('get_query_set', 'get_queryset'),
|
|---|
| 151 | + )
|
|---|
| 152 | +
|
|---|
| 153 | +
|
|---|
| 154 | +class ChangeList(six.with_metaclass(RenameChangeListMethods)):
|
|---|
| 155 | def __init__(self, request, model, list_display, list_display_links,
|
|---|
| 156 | list_filter, date_hierarchy, search_fields, list_select_related,
|
|---|
| 157 | list_per_page, list_max_show_all, list_editable, model_admin):
|
|---|
| 158 | self.model = model
|
|---|
| 159 | self.opts = model._meta
|
|---|
| 160 | self.lookup_opts = self.opts
|
|---|
| 161 | - self.root_query_set = model_admin.queryset(request)
|
|---|
| 162 | + self.root_query_set = model_admin.get_queryset(request)
|
|---|
| 163 | self.list_display = list_display
|
|---|
| 164 | self.list_display_links = list_display_links
|
|---|
| 165 | self.list_filter = list_filter
|
|---|
| 166 | @@ -70,7 +78,7 @@ class ChangeList(object):
|
|---|
| 167 | else:
|
|---|
| 168 | self.list_editable = list_editable
|
|---|
| 169 | self.query = request.GET.get(SEARCH_VAR, '')
|
|---|
| 170 | - self.query_set = self.get_query_set(request)
|
|---|
| 171 | + self.query_set = self.get_queryset(request)
|
|---|
| 172 | self.get_results(request)
|
|---|
| 173 | if self.is_popup:
|
|---|
| 174 | title = ugettext('Select %s')
|
|---|
| 175 | @@ -304,7 +312,7 @@ class ChangeList(object):
|
|---|
| 176 | ordering_fields[idx] = 'desc' if pfx == '-' else 'asc'
|
|---|
| 177 | return ordering_fields
|
|---|
| 178 |
|
|---|
| 179 | - def get_query_set(self, request):
|
|---|
| 180 | + def get_queryset(self, request):
|
|---|
| 181 | # First, we collect all the declared list filters.
|
|---|
| 182 | (self.filter_specs, self.has_filters, remaining_lookup_params,
|
|---|
| 183 | use_distinct) = self.get_filters(request)
|
|---|
| 184 | diff --git a/django/contrib/auth/admin.py b/django/contrib/auth/admin.py
|
|---|
| 185 | index 7b81667..0abc361 100644
|
|---|
| 186 | --- a/django/contrib/auth/admin.py
|
|---|
| 187 | +++ b/django/contrib/auth/admin.py
|
|---|
| 188 | @@ -118,7 +118,7 @@ class UserAdmin(admin.ModelAdmin):
|
|---|
| 189 | def user_change_password(self, request, id, form_url=''):
|
|---|
| 190 | if not self.has_change_permission(request):
|
|---|
| 191 | raise PermissionDenied
|
|---|
| 192 | - user = get_object_or_404(self.queryset(request), pk=id)
|
|---|
| 193 | + user = get_object_or_404(self.get_queryset(request), pk=id)
|
|---|
| 194 | if request.method == 'POST':
|
|---|
| 195 | form = self.change_password_form(user, request.POST)
|
|---|
| 196 | if form.is_valid():
|
|---|
| 197 | diff --git a/django/contrib/comments/managers.py b/django/contrib/comments/managers.py
|
|---|
| 198 | index bc0fc5f..6562004 100644
|
|---|
| 199 | --- a/django/contrib/comments/managers.py
|
|---|
| 200 | +++ b/django/contrib/comments/managers.py
|
|---|
| 201 | @@ -8,7 +8,7 @@ class CommentManager(models.Manager):
|
|---|
| 202 | """
|
|---|
| 203 | QuerySet for all comments currently in the moderation queue.
|
|---|
| 204 | """
|
|---|
| 205 | - return self.get_query_set().filter(is_public=False, is_removed=False)
|
|---|
| 206 | + return self.get_queryset().filter(is_public=False, is_removed=False)
|
|---|
| 207 |
|
|---|
| 208 | def for_model(self, model):
|
|---|
| 209 | """
|
|---|
| 210 | @@ -16,7 +16,7 @@ class CommentManager(models.Manager):
|
|---|
| 211 | a class).
|
|---|
| 212 | """
|
|---|
| 213 | ct = ContentType.objects.get_for_model(model)
|
|---|
| 214 | - qs = self.get_query_set().filter(content_type=ct)
|
|---|
| 215 | + qs = self.get_queryset().filter(content_type=ct)
|
|---|
| 216 | if isinstance(model, models.Model):
|
|---|
| 217 | qs = qs.filter(object_pk=force_text(model._get_pk_val()))
|
|---|
| 218 | return qs
|
|---|
| 219 | diff --git a/django/contrib/comments/templatetags/comments.py b/django/contrib/comments/templatetags/comments.py
|
|---|
| 220 | index 4d4eb23..8d21b7b 100644
|
|---|
| 221 | --- a/django/contrib/comments/templatetags/comments.py
|
|---|
| 222 | +++ b/django/contrib/comments/templatetags/comments.py
|
|---|
| 223 | @@ -3,11 +3,20 @@ from django.template.loader import render_to_string
|
|---|
| 224 | from django.conf import settings
|
|---|
| 225 | from django.contrib.contenttypes.models import ContentType
|
|---|
| 226 | from django.contrib import comments
|
|---|
| 227 | +from django.utils import six
|
|---|
| 228 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 229 | from django.utils.encoding import smart_text
|
|---|
| 230 |
|
|---|
| 231 | register = template.Library()
|
|---|
| 232 |
|
|---|
| 233 | -class BaseCommentNode(template.Node):
|
|---|
| 234 | +
|
|---|
| 235 | +class RenameBaseCommentNodeMethods(RenameMethodsBase):
|
|---|
| 236 | + renamed_methods = (
|
|---|
| 237 | + ('get_query_set', 'get_queryset'),
|
|---|
| 238 | + )
|
|---|
| 239 | +
|
|---|
| 240 | +
|
|---|
| 241 | +class BaseCommentNode(six.with_metaclass(RenameBaseCommentNodeMethods, template.Node)):
|
|---|
| 242 | """
|
|---|
| 243 | Base helper class (abstract) for handling the get_comment_* template tags.
|
|---|
| 244 | Looks a bit strange, but the subclasses below should make this a bit more
|
|---|
| 245 | @@ -64,11 +73,11 @@ class BaseCommentNode(template.Node):
|
|---|
| 246 | self.comment = comment
|
|---|
| 247 |
|
|---|
| 248 | def render(self, context):
|
|---|
| 249 | - qs = self.get_query_set(context)
|
|---|
| 250 | + qs = self.get_queryset(context)
|
|---|
| 251 | context[self.as_varname] = self.get_context_value_from_queryset(context, qs)
|
|---|
| 252 | return ''
|
|---|
| 253 |
|
|---|
| 254 | - def get_query_set(self, context):
|
|---|
| 255 | + def get_queryset(self, context):
|
|---|
| 256 | ctype, object_pk = self.get_target_ctype_pk(context)
|
|---|
| 257 | if not object_pk:
|
|---|
| 258 | return self.comment_model.objects.none()
|
|---|
| 259 | @@ -205,7 +214,7 @@ class RenderCommentListNode(CommentListNode):
|
|---|
| 260 | "comments/%s/list.html" % ctype.app_label,
|
|---|
| 261 | "comments/list.html"
|
|---|
| 262 | ]
|
|---|
| 263 | - qs = self.get_query_set(context)
|
|---|
| 264 | + qs = self.get_queryset(context)
|
|---|
| 265 | context.push()
|
|---|
| 266 | liststr = render_to_string(template_search_list, {
|
|---|
| 267 | "comment_list" : self.get_context_value_from_queryset(context, qs)
|
|---|
| 268 | diff --git a/django/contrib/contenttypes/generic.py b/django/contrib/contenttypes/generic.py
|
|---|
| 269 | index 20ff704..d540cef 100644
|
|---|
| 270 | --- a/django/contrib/contenttypes/generic.py
|
|---|
| 271 | +++ b/django/contrib/contenttypes/generic.py
|
|---|
| 272 | @@ -16,10 +16,18 @@ from django.forms import ModelForm
|
|---|
| 273 | from django.forms.models import BaseModelFormSet, modelformset_factory, save_instance
|
|---|
| 274 | from django.contrib.admin.options import InlineModelAdmin, flatten_fieldsets
|
|---|
| 275 | from django.contrib.contenttypes.models import ContentType
|
|---|
| 276 | +from django.utils import six
|
|---|
| 277 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 278 | from django.utils.encoding import smart_text
|
|---|
| 279 |
|
|---|
| 280 |
|
|---|
| 281 | -class GenericForeignKey(object):
|
|---|
| 282 | +class RenameGenericForeignKeyMethods(RenameMethodsBase):
|
|---|
| 283 | + renamed_methods = (
|
|---|
| 284 | + ('get_prefetch_query_set', 'get_prefetch_queryset'),
|
|---|
| 285 | + )
|
|---|
| 286 | +
|
|---|
| 287 | +
|
|---|
| 288 | +class GenericForeignKey(six.with_metaclass(RenameGenericForeignKeyMethods)):
|
|---|
| 289 | """
|
|---|
| 290 | Provides a generic relation to any object through content-type/object-id
|
|---|
| 291 | fields.
|
|---|
| 292 | @@ -60,7 +68,7 @@ class GenericForeignKey(object):
|
|---|
| 293 | # This should never happen. I love comments like this, don't you?
|
|---|
| 294 | raise Exception("Impossible arguments to GFK.get_content_type!")
|
|---|
| 295 |
|
|---|
| 296 | - def get_prefetch_query_set(self, instances):
|
|---|
| 297 | + def get_prefetch_queryset(self, instances):
|
|---|
| 298 | # For efficiency, group the instances by content type and then do one
|
|---|
| 299 | # query per model
|
|---|
| 300 | fk_dict = defaultdict(set)
|
|---|
| 301 | @@ -316,21 +324,21 @@ def create_generic_related_manager(superclass):
|
|---|
| 302 | '%s__exact' % object_id_field_name: instance._get_pk_val(),
|
|---|
| 303 | }
|
|---|
| 304 |
|
|---|
| 305 | - def get_query_set(self):
|
|---|
| 306 | + def get_queryset(self):
|
|---|
| 307 | try:
|
|---|
| 308 | return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
|
|---|
| 309 | except (AttributeError, KeyError):
|
|---|
| 310 | db = self._db or router.db_for_read(self.model, instance=self.instance)
|
|---|
| 311 | - return super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**self.core_filters)
|
|---|
| 312 | + return super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**self.core_filters)
|
|---|
| 313 |
|
|---|
| 314 | - def get_prefetch_query_set(self, instances):
|
|---|
| 315 | + def get_prefetch_queryset(self, instances):
|
|---|
| 316 | db = self._db or router.db_for_read(self.model, instance=instances[0])
|
|---|
| 317 | query = {
|
|---|
| 318 | '%s__pk' % self.content_type_field_name: self.content_type.id,
|
|---|
| 319 | '%s__in' % self.object_id_field_name:
|
|---|
| 320 | set(obj._get_pk_val() for obj in instances)
|
|---|
| 321 | }
|
|---|
| 322 | - qs = super(GenericRelatedObjectManager, self).get_query_set().using(db).filter(**query)
|
|---|
| 323 | + qs = super(GenericRelatedObjectManager, self).get_queryset().using(db).filter(**query)
|
|---|
| 324 | # We (possibly) need to convert object IDs to the type of the
|
|---|
| 325 | # instances' PK in order to match up instances:
|
|---|
| 326 | object_id_converter = instances[0]._meta.pk.to_python
|
|---|
| 327 | diff --git a/django/contrib/gis/db/models/manager.py b/django/contrib/gis/db/models/manager.py
|
|---|
| 328 | index 61fb821..aa57e3a 100644
|
|---|
| 329 | --- a/django/contrib/gis/db/models/manager.py
|
|---|
| 330 | +++ b/django/contrib/gis/db/models/manager.py
|
|---|
| 331 | @@ -9,95 +9,95 @@ class GeoManager(Manager):
|
|---|
| 332 | # properly.
|
|---|
| 333 | use_for_related_fields = True
|
|---|
| 334 |
|
|---|
| 335 | - def get_query_set(self):
|
|---|
| 336 | + def get_queryset(self):
|
|---|
| 337 | return GeoQuerySet(self.model, using=self._db)
|
|---|
| 338 |
|
|---|
| 339 | def area(self, *args, **kwargs):
|
|---|
| 340 | - return self.get_query_set().area(*args, **kwargs)
|
|---|
| 341 | + return self.get_queryset().area(*args, **kwargs)
|
|---|
| 342 |
|
|---|
| 343 | def centroid(self, *args, **kwargs):
|
|---|
| 344 | - return self.get_query_set().centroid(*args, **kwargs)
|
|---|
| 345 | + return self.get_queryset().centroid(*args, **kwargs)
|
|---|
| 346 |
|
|---|
| 347 | def collect(self, *args, **kwargs):
|
|---|
| 348 | - return self.get_query_set().collect(*args, **kwargs)
|
|---|
| 349 | + return self.get_queryset().collect(*args, **kwargs)
|
|---|
| 350 |
|
|---|
| 351 | def difference(self, *args, **kwargs):
|
|---|
| 352 | - return self.get_query_set().difference(*args, **kwargs)
|
|---|
| 353 | + return self.get_queryset().difference(*args, **kwargs)
|
|---|
| 354 |
|
|---|
| 355 | def distance(self, *args, **kwargs):
|
|---|
| 356 | - return self.get_query_set().distance(*args, **kwargs)
|
|---|
| 357 | + return self.get_queryset().distance(*args, **kwargs)
|
|---|
| 358 |
|
|---|
| 359 | def envelope(self, *args, **kwargs):
|
|---|
| 360 | - return self.get_query_set().envelope(*args, **kwargs)
|
|---|
| 361 | + return self.get_queryset().envelope(*args, **kwargs)
|
|---|
| 362 |
|
|---|
| 363 | def extent(self, *args, **kwargs):
|
|---|
| 364 | - return self.get_query_set().extent(*args, **kwargs)
|
|---|
| 365 | + return self.get_queryset().extent(*args, **kwargs)
|
|---|
| 366 |
|
|---|
| 367 | def extent3d(self, *args, **kwargs):
|
|---|
| 368 | - return self.get_query_set().extent3d(*args, **kwargs)
|
|---|
| 369 | + return self.get_queryset().extent3d(*args, **kwargs)
|
|---|
| 370 |
|
|---|
| 371 | def force_rhr(self, *args, **kwargs):
|
|---|
| 372 | - return self.get_query_set().force_rhr(*args, **kwargs)
|
|---|
| 373 | + return self.get_queryset().force_rhr(*args, **kwargs)
|
|---|
| 374 |
|
|---|
| 375 | def geohash(self, *args, **kwargs):
|
|---|
| 376 | - return self.get_query_set().geohash(*args, **kwargs)
|
|---|
| 377 | + return self.get_queryset().geohash(*args, **kwargs)
|
|---|
| 378 |
|
|---|
| 379 | def geojson(self, *args, **kwargs):
|
|---|
| 380 | - return self.get_query_set().geojson(*args, **kwargs)
|
|---|
| 381 | + return self.get_queryset().geojson(*args, **kwargs)
|
|---|
| 382 |
|
|---|
| 383 | def gml(self, *args, **kwargs):
|
|---|
| 384 | - return self.get_query_set().gml(*args, **kwargs)
|
|---|
| 385 | + return self.get_queryset().gml(*args, **kwargs)
|
|---|
| 386 |
|
|---|
| 387 | def intersection(self, *args, **kwargs):
|
|---|
| 388 | - return self.get_query_set().intersection(*args, **kwargs)
|
|---|
| 389 | + return self.get_queryset().intersection(*args, **kwargs)
|
|---|
| 390 |
|
|---|
| 391 | def kml(self, *args, **kwargs):
|
|---|
| 392 | - return self.get_query_set().kml(*args, **kwargs)
|
|---|
| 393 | + return self.get_queryset().kml(*args, **kwargs)
|
|---|
| 394 |
|
|---|
| 395 | def length(self, *args, **kwargs):
|
|---|
| 396 | - return self.get_query_set().length(*args, **kwargs)
|
|---|
| 397 | + return self.get_queryset().length(*args, **kwargs)
|
|---|
| 398 |
|
|---|
| 399 | def make_line(self, *args, **kwargs):
|
|---|
| 400 | - return self.get_query_set().make_line(*args, **kwargs)
|
|---|
| 401 | + return self.get_queryset().make_line(*args, **kwargs)
|
|---|
| 402 |
|
|---|
| 403 | def mem_size(self, *args, **kwargs):
|
|---|
| 404 | - return self.get_query_set().mem_size(*args, **kwargs)
|
|---|
| 405 | + return self.get_queryset().mem_size(*args, **kwargs)
|
|---|
| 406 |
|
|---|
| 407 | def num_geom(self, *args, **kwargs):
|
|---|
| 408 | - return self.get_query_set().num_geom(*args, **kwargs)
|
|---|
| 409 | + return self.get_queryset().num_geom(*args, **kwargs)
|
|---|
| 410 |
|
|---|
| 411 | def num_points(self, *args, **kwargs):
|
|---|
| 412 | - return self.get_query_set().num_points(*args, **kwargs)
|
|---|
| 413 | + return self.get_queryset().num_points(*args, **kwargs)
|
|---|
| 414 |
|
|---|
| 415 | def perimeter(self, *args, **kwargs):
|
|---|
| 416 | - return self.get_query_set().perimeter(*args, **kwargs)
|
|---|
| 417 | + return self.get_queryset().perimeter(*args, **kwargs)
|
|---|
| 418 |
|
|---|
| 419 | def point_on_surface(self, *args, **kwargs):
|
|---|
| 420 | - return self.get_query_set().point_on_surface(*args, **kwargs)
|
|---|
| 421 | + return self.get_queryset().point_on_surface(*args, **kwargs)
|
|---|
| 422 |
|
|---|
| 423 | def reverse_geom(self, *args, **kwargs):
|
|---|
| 424 | - return self.get_query_set().reverse_geom(*args, **kwargs)
|
|---|
| 425 | + return self.get_queryset().reverse_geom(*args, **kwargs)
|
|---|
| 426 |
|
|---|
| 427 | def scale(self, *args, **kwargs):
|
|---|
| 428 | - return self.get_query_set().scale(*args, **kwargs)
|
|---|
| 429 | + return self.get_queryset().scale(*args, **kwargs)
|
|---|
| 430 |
|
|---|
| 431 | def snap_to_grid(self, *args, **kwargs):
|
|---|
| 432 | - return self.get_query_set().snap_to_grid(*args, **kwargs)
|
|---|
| 433 | + return self.get_queryset().snap_to_grid(*args, **kwargs)
|
|---|
| 434 |
|
|---|
| 435 | def svg(self, *args, **kwargs):
|
|---|
| 436 | - return self.get_query_set().svg(*args, **kwargs)
|
|---|
| 437 | + return self.get_queryset().svg(*args, **kwargs)
|
|---|
| 438 |
|
|---|
| 439 | def sym_difference(self, *args, **kwargs):
|
|---|
| 440 | - return self.get_query_set().sym_difference(*args, **kwargs)
|
|---|
| 441 | + return self.get_queryset().sym_difference(*args, **kwargs)
|
|---|
| 442 |
|
|---|
| 443 | def transform(self, *args, **kwargs):
|
|---|
| 444 | - return self.get_query_set().transform(*args, **kwargs)
|
|---|
| 445 | + return self.get_queryset().transform(*args, **kwargs)
|
|---|
| 446 |
|
|---|
| 447 | def translate(self, *args, **kwargs):
|
|---|
| 448 | - return self.get_query_set().translate(*args, **kwargs)
|
|---|
| 449 | + return self.get_queryset().translate(*args, **kwargs)
|
|---|
| 450 |
|
|---|
| 451 | def union(self, *args, **kwargs):
|
|---|
| 452 | - return self.get_query_set().union(*args, **kwargs)
|
|---|
| 453 | + return self.get_queryset().union(*args, **kwargs)
|
|---|
| 454 |
|
|---|
| 455 | def unionagg(self, *args, **kwargs):
|
|---|
| 456 | - return self.get_query_set().unionagg(*args, **kwargs)
|
|---|
| 457 | + return self.get_queryset().unionagg(*args, **kwargs)
|
|---|
| 458 | diff --git a/django/contrib/sites/managers.py b/django/contrib/sites/managers.py
|
|---|
| 459 | index 3df485a..becb35b 100644
|
|---|
| 460 | --- a/django/contrib/sites/managers.py
|
|---|
| 461 | +++ b/django/contrib/sites/managers.py
|
|---|
| 462 | @@ -35,7 +35,7 @@ class CurrentSiteManager(models.Manager):
|
|---|
| 463 | (self.__class__.__name__, self.__field_name, self.model._meta.object_name))
|
|---|
| 464 | self.__is_validated = True
|
|---|
| 465 |
|
|---|
| 466 | - def get_query_set(self):
|
|---|
| 467 | + def get_queryset(self):
|
|---|
| 468 | if not self.__is_validated:
|
|---|
| 469 | self._validate_field_name()
|
|---|
| 470 | - return super(CurrentSiteManager, self).get_query_set().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
|
|---|
| 471 | + return super(CurrentSiteManager, self).get_queryset().filter(**{self.__field_name + '__id__exact': settings.SITE_ID})
|
|---|
| 472 | diff --git a/django/db/models/fields/related.py b/django/db/models/fields/related.py
|
|---|
| 473 | index 01b8a55..843b78e 100644
|
|---|
| 474 | --- a/django/db/models/fields/related.py
|
|---|
| 475 | +++ b/django/db/models/fields/related.py
|
|---|
| 476 | @@ -11,6 +11,7 @@ from django.db.models.query_utils import QueryWrapper
|
|---|
| 477 | from django.db.models.deletion import CASCADE
|
|---|
| 478 | from django.utils.encoding import smart_text
|
|---|
| 479 | from django.utils import six
|
|---|
| 480 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 481 | from django.utils.translation import ugettext_lazy as _, string_concat
|
|---|
| 482 | from django.utils.functional import curry, cached_property
|
|---|
| 483 | from django.core import exceptions
|
|---|
| 484 | @@ -225,7 +226,14 @@ class RelatedField(object):
|
|---|
| 485 | return self.rel.related_name or self.opts.model_name
|
|---|
| 486 |
|
|---|
| 487 |
|
|---|
| 488 | -class SingleRelatedObjectDescriptor(object):
|
|---|
| 489 | +class RenameRelatedObjectDescriptorMethods(RenameMethodsBase):
|
|---|
| 490 | + renamed_methods = (
|
|---|
| 491 | + ('get_query_set', 'get_queryset'),
|
|---|
| 492 | + ('get_prefetch_query_set', 'get_prefetch_queryset'),
|
|---|
| 493 | + )
|
|---|
| 494 | +
|
|---|
| 495 | +
|
|---|
| 496 | +class SingleRelatedObjectDescriptor(six.with_metaclass(RenameRelatedObjectDescriptorMethods)):
|
|---|
| 497 | # This class provides the functionality that makes the related-object
|
|---|
| 498 | # managers available as attributes on a model class, for fields that have
|
|---|
| 499 | # a single "remote" value, on the class pointed to by a related field.
|
|---|
| 500 | @@ -238,16 +246,16 @@ class SingleRelatedObjectDescriptor(object):
|
|---|
| 501 | def is_cached(self, instance):
|
|---|
| 502 | return hasattr(instance, self.cache_name)
|
|---|
| 503 |
|
|---|
| 504 | - def get_query_set(self, **db_hints):
|
|---|
| 505 | + def get_queryset(self, **db_hints):
|
|---|
| 506 | db = router.db_for_read(self.related.model, **db_hints)
|
|---|
| 507 | return self.related.model._base_manager.using(db)
|
|---|
| 508 |
|
|---|
| 509 | - def get_prefetch_query_set(self, instances):
|
|---|
| 510 | + def get_prefetch_queryset(self, instances):
|
|---|
| 511 | rel_obj_attr = attrgetter(self.related.field.attname)
|
|---|
| 512 | instance_attr = lambda obj: obj._get_pk_val()
|
|---|
| 513 | instances_dict = dict((instance_attr(inst), inst) for inst in instances)
|
|---|
| 514 | params = {'%s__pk__in' % self.related.field.name: list(instances_dict)}
|
|---|
| 515 | - qs = self.get_query_set(instance=instances[0]).filter(**params)
|
|---|
| 516 | + qs = self.get_queryset(instance=instances[0]).filter(**params)
|
|---|
| 517 | # Since we're going to assign directly in the cache,
|
|---|
| 518 | # we must manage the reverse relation cache manually.
|
|---|
| 519 | rel_obj_cache_name = self.related.field.get_cache_name()
|
|---|
| 520 | @@ -268,7 +276,7 @@ class SingleRelatedObjectDescriptor(object):
|
|---|
| 521 | else:
|
|---|
| 522 | params = {'%s__pk' % self.related.field.name: related_pk}
|
|---|
| 523 | try:
|
|---|
| 524 | - rel_obj = self.get_query_set(instance=instance).get(**params)
|
|---|
| 525 | + rel_obj = self.get_queryset(instance=instance).get(**params)
|
|---|
| 526 | except self.related.model.DoesNotExist:
|
|---|
| 527 | rel_obj = None
|
|---|
| 528 | else:
|
|---|
| 529 | @@ -321,7 +329,7 @@ class SingleRelatedObjectDescriptor(object):
|
|---|
| 530 | setattr(value, self.related.field.get_cache_name(), instance)
|
|---|
| 531 |
|
|---|
| 532 |
|
|---|
| 533 | -class ReverseSingleRelatedObjectDescriptor(object):
|
|---|
| 534 | +class ReverseSingleRelatedObjectDescriptor(six.with_metaclass(RenameRelatedObjectDescriptorMethods)):
|
|---|
| 535 | # This class provides the functionality that makes the related-object
|
|---|
| 536 | # managers available as attributes on a model class, for fields that have
|
|---|
| 537 | # a single "remote" value, on the class that defines the related field.
|
|---|
| 538 | @@ -334,7 +342,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
|---|
| 539 | def is_cached(self, instance):
|
|---|
| 540 | return hasattr(instance, self.cache_name)
|
|---|
| 541 |
|
|---|
| 542 | - def get_query_set(self, **db_hints):
|
|---|
| 543 | + def get_queryset(self, **db_hints):
|
|---|
| 544 | db = router.db_for_read(self.field.rel.to, **db_hints)
|
|---|
| 545 | rel_mgr = self.field.rel.to._default_manager
|
|---|
| 546 | # If the related manager indicates that it should be used for
|
|---|
| 547 | @@ -344,7 +352,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
|---|
| 548 | else:
|
|---|
| 549 | return QuerySet(self.field.rel.to).using(db)
|
|---|
| 550 |
|
|---|
| 551 | - def get_prefetch_query_set(self, instances):
|
|---|
| 552 | + def get_prefetch_queryset(self, instances):
|
|---|
| 553 | other_field = self.field.rel.get_related_field()
|
|---|
| 554 | rel_obj_attr = attrgetter(other_field.attname)
|
|---|
| 555 | instance_attr = attrgetter(self.field.attname)
|
|---|
| 556 | @@ -353,7 +361,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
|---|
| 557 | params = {'%s__pk__in' % self.field.rel.field_name: list(instances_dict)}
|
|---|
| 558 | else:
|
|---|
| 559 | params = {'%s__in' % self.field.rel.field_name: list(instances_dict)}
|
|---|
| 560 | - qs = self.get_query_set(instance=instances[0]).filter(**params)
|
|---|
| 561 | + qs = self.get_queryset(instance=instances[0]).filter(**params)
|
|---|
| 562 | # Since we're going to assign directly in the cache,
|
|---|
| 563 | # we must manage the reverse relation cache manually.
|
|---|
| 564 | if not self.field.rel.multiple:
|
|---|
| 565 | @@ -378,7 +386,7 @@ class ReverseSingleRelatedObjectDescriptor(object):
|
|---|
| 566 | params = {'%s__%s' % (self.field.rel.field_name, other_field.rel.field_name): val}
|
|---|
| 567 | else:
|
|---|
| 568 | params = {'%s__exact' % self.field.rel.field_name: val}
|
|---|
| 569 | - qs = self.get_query_set(instance=instance)
|
|---|
| 570 | + qs = self.get_queryset(instance=instance)
|
|---|
| 571 | # Assuming the database enforces foreign keys, this won't fail.
|
|---|
| 572 | rel_obj = qs.get(**params)
|
|---|
| 573 | if not self.field.rel.multiple:
|
|---|
| 574 | @@ -490,26 +498,26 @@ class ForeignRelatedObjectsDescriptor(object):
|
|---|
| 575 | }
|
|---|
| 576 | self.model = rel_model
|
|---|
| 577 |
|
|---|
| 578 | - def get_query_set(self):
|
|---|
| 579 | + def get_queryset(self):
|
|---|
| 580 | try:
|
|---|
| 581 | return self.instance._prefetched_objects_cache[rel_field.related_query_name()]
|
|---|
| 582 | except (AttributeError, KeyError):
|
|---|
| 583 | db = self._db or router.db_for_read(self.model, instance=self.instance)
|
|---|
| 584 | - qs = super(RelatedManager, self).get_query_set().using(db).filter(**self.core_filters)
|
|---|
| 585 | + qs = super(RelatedManager, self).get_queryset().using(db).filter(**self.core_filters)
|
|---|
| 586 | val = getattr(self.instance, attname)
|
|---|
| 587 | if val is None or val == '' and connections[db].features.interprets_empty_strings_as_nulls:
|
|---|
| 588 | return qs.none()
|
|---|
| 589 | qs._known_related_objects = {rel_field: {self.instance.pk: self.instance}}
|
|---|
| 590 | return qs
|
|---|
| 591 |
|
|---|
| 592 | - def get_prefetch_query_set(self, instances):
|
|---|
| 593 | + def get_prefetch_queryset(self, instances):
|
|---|
| 594 | rel_obj_attr = attrgetter(rel_field.attname)
|
|---|
| 595 | instance_attr = attrgetter(attname)
|
|---|
| 596 | instances_dict = dict((instance_attr(inst), inst) for inst in instances)
|
|---|
| 597 | db = self._db or router.db_for_read(self.model, instance=instances[0])
|
|---|
| 598 | query = {'%s__%s__in' % (rel_field.name, attname): list(instances_dict)}
|
|---|
| 599 | - qs = super(RelatedManager, self).get_query_set().using(db).filter(**query)
|
|---|
| 600 | - # Since we just bypassed this class' get_query_set(), we must manage
|
|---|
| 601 | + qs = super(RelatedManager, self).get_queryset().using(db).filter(**query)
|
|---|
| 602 | + # Since we just bypassed this class' get_queryset(), we must manage
|
|---|
| 603 | # the reverse relation manually.
|
|---|
| 604 | for rel_obj in qs:
|
|---|
| 605 | instance = instances_dict[rel_obj_attr(rel_obj)]
|
|---|
| 606 | @@ -603,20 +611,20 @@ def create_many_related_manager(superclass, rel):
|
|---|
| 607 | else:
|
|---|
| 608 | return obj.pk
|
|---|
| 609 |
|
|---|
| 610 | - def get_query_set(self):
|
|---|
| 611 | + def get_queryset(self):
|
|---|
| 612 | try:
|
|---|
| 613 | return self.instance._prefetched_objects_cache[self.prefetch_cache_name]
|
|---|
| 614 | except (AttributeError, KeyError):
|
|---|
| 615 | db = self._db or router.db_for_read(self.instance.__class__, instance=self.instance)
|
|---|
| 616 | - return super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**self.core_filters)
|
|---|
| 617 | + return super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**self.core_filters)
|
|---|
| 618 |
|
|---|
| 619 | - def get_prefetch_query_set(self, instances):
|
|---|
| 620 | + def get_prefetch_queryset(self, instances):
|
|---|
| 621 | instance = instances[0]
|
|---|
| 622 | from django.db import connections
|
|---|
| 623 | db = self._db or router.db_for_read(instance.__class__, instance=instance)
|
|---|
| 624 | query = {'%s__pk__in' % self.query_field_name:
|
|---|
| 625 | set(obj._get_pk_val() for obj in instances)}
|
|---|
| 626 | - qs = super(ManyRelatedManager, self).get_query_set().using(db)._next_is_sticky().filter(**query)
|
|---|
| 627 | + qs = super(ManyRelatedManager, self).get_queryset().using(db)._next_is_sticky().filter(**query)
|
|---|
| 628 |
|
|---|
| 629 | # M2M: need to annotate the query in order to get the primary model
|
|---|
| 630 | # that the secondary model was actually related to. We know that
|
|---|
| 631 | diff --git a/django/db/models/manager.py b/django/db/models/manager.py
|
|---|
| 632 | index b1f2e10..687c5ab 100644
|
|---|
| 633 | --- a/django/db/models/manager.py
|
|---|
| 634 | +++ b/django/db/models/manager.py
|
|---|
| 635 | @@ -3,7 +3,8 @@ from django.db import router
|
|---|
| 636 | from django.db.models.query import QuerySet, insert_query, RawQuerySet
|
|---|
| 637 | from django.db.models import signals
|
|---|
| 638 | from django.db.models.fields import FieldDoesNotExist
|
|---|
| 639 | -
|
|---|
| 640 | +from django.utils import six
|
|---|
| 641 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 642 |
|
|---|
| 643 | def ensure_default_manager(sender, **kwargs):
|
|---|
| 644 | """
|
|---|
| 645 | @@ -47,7 +48,15 @@ def ensure_default_manager(sender, **kwargs):
|
|---|
| 646 | signals.class_prepared.connect(ensure_default_manager)
|
|---|
| 647 |
|
|---|
| 648 |
|
|---|
| 649 | -class Manager(object):
|
|---|
| 650 | +class RenameManagerMethods(RenameMethodsBase):
|
|---|
| 651 | + renamed_methods = (
|
|---|
| 652 | + ('get_query_set', 'get_queryset'),
|
|---|
| 653 | + ('get_prefetch_query_set', 'get_prefetch_queryset'),
|
|---|
| 654 | + )
|
|---|
| 655 | +
|
|---|
| 656 | +
|
|---|
| 657 | +class Manager(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 658 | +# class Manager(object):
|
|---|
| 659 | # Tracks each time a Manager instance is created. Used to retain order.
|
|---|
| 660 | creation_counter = 0
|
|---|
| 661 |
|
|---|
| 662 | @@ -112,113 +121,113 @@ class Manager(object):
|
|---|
| 663 | # PROXIES TO QUERYSET #
|
|---|
| 664 | #######################
|
|---|
| 665 |
|
|---|
| 666 | - def get_query_set(self):
|
|---|
| 667 | + def get_queryset(self):
|
|---|
| 668 | """Returns a new QuerySet object. Subclasses can override this method
|
|---|
| 669 | to easily customize the behavior of the Manager.
|
|---|
| 670 | """
|
|---|
| 671 | return QuerySet(self.model, using=self._db)
|
|---|
| 672 |
|
|---|
| 673 | def none(self):
|
|---|
| 674 | - return self.get_query_set().none()
|
|---|
| 675 | + return self.get_queryset().none()
|
|---|
| 676 |
|
|---|
| 677 | def all(self):
|
|---|
| 678 | - return self.get_query_set()
|
|---|
| 679 | + return self.get_queryset()
|
|---|
| 680 |
|
|---|
| 681 | def count(self):
|
|---|
| 682 | - return self.get_query_set().count()
|
|---|
| 683 | + return self.get_queryset().count()
|
|---|
| 684 |
|
|---|
| 685 | def dates(self, *args, **kwargs):
|
|---|
| 686 | - return self.get_query_set().dates(*args, **kwargs)
|
|---|
| 687 | + return self.get_queryset().dates(*args, **kwargs)
|
|---|
| 688 |
|
|---|
| 689 | def datetimes(self, *args, **kwargs):
|
|---|
| 690 | - return self.get_query_set().datetimes(*args, **kwargs)
|
|---|
| 691 | + return self.get_queryset().datetimes(*args, **kwargs)
|
|---|
| 692 |
|
|---|
| 693 | def distinct(self, *args, **kwargs):
|
|---|
| 694 | - return self.get_query_set().distinct(*args, **kwargs)
|
|---|
| 695 | + return self.get_queryset().distinct(*args, **kwargs)
|
|---|
| 696 |
|
|---|
| 697 | def extra(self, *args, **kwargs):
|
|---|
| 698 | - return self.get_query_set().extra(*args, **kwargs)
|
|---|
| 699 | + return self.get_queryset().extra(*args, **kwargs)
|
|---|
| 700 |
|
|---|
| 701 | def get(self, *args, **kwargs):
|
|---|
| 702 | - return self.get_query_set().get(*args, **kwargs)
|
|---|
| 703 | + return self.get_queryset().get(*args, **kwargs)
|
|---|
| 704 |
|
|---|
| 705 | def get_or_create(self, **kwargs):
|
|---|
| 706 | - return self.get_query_set().get_or_create(**kwargs)
|
|---|
| 707 | + return self.get_queryset().get_or_create(**kwargs)
|
|---|
| 708 |
|
|---|
| 709 | def create(self, **kwargs):
|
|---|
| 710 | - return self.get_query_set().create(**kwargs)
|
|---|
| 711 | + return self.get_queryset().create(**kwargs)
|
|---|
| 712 |
|
|---|
| 713 | def bulk_create(self, *args, **kwargs):
|
|---|
| 714 | - return self.get_query_set().bulk_create(*args, **kwargs)
|
|---|
| 715 | + return self.get_queryset().bulk_create(*args, **kwargs)
|
|---|
| 716 |
|
|---|
| 717 | def filter(self, *args, **kwargs):
|
|---|
| 718 | - return self.get_query_set().filter(*args, **kwargs)
|
|---|
| 719 | + return self.get_queryset().filter(*args, **kwargs)
|
|---|
| 720 |
|
|---|
| 721 | def aggregate(self, *args, **kwargs):
|
|---|
| 722 | - return self.get_query_set().aggregate(*args, **kwargs)
|
|---|
| 723 | + return self.get_queryset().aggregate(*args, **kwargs)
|
|---|
| 724 |
|
|---|
| 725 | def annotate(self, *args, **kwargs):
|
|---|
| 726 | - return self.get_query_set().annotate(*args, **kwargs)
|
|---|
| 727 | + return self.get_queryset().annotate(*args, **kwargs)
|
|---|
| 728 |
|
|---|
| 729 | def complex_filter(self, *args, **kwargs):
|
|---|
| 730 | - return self.get_query_set().complex_filter(*args, **kwargs)
|
|---|
| 731 | + return self.get_queryset().complex_filter(*args, **kwargs)
|
|---|
| 732 |
|
|---|
| 733 | def exclude(self, *args, **kwargs):
|
|---|
| 734 | - return self.get_query_set().exclude(*args, **kwargs)
|
|---|
| 735 | + return self.get_queryset().exclude(*args, **kwargs)
|
|---|
| 736 |
|
|---|
| 737 | def in_bulk(self, *args, **kwargs):
|
|---|
| 738 | - return self.get_query_set().in_bulk(*args, **kwargs)
|
|---|
| 739 | + return self.get_queryset().in_bulk(*args, **kwargs)
|
|---|
| 740 |
|
|---|
| 741 | def iterator(self, *args, **kwargs):
|
|---|
| 742 | - return self.get_query_set().iterator(*args, **kwargs)
|
|---|
| 743 | + return self.get_queryset().iterator(*args, **kwargs)
|
|---|
| 744 |
|
|---|
| 745 | def earliest(self, *args, **kwargs):
|
|---|
| 746 | - return self.get_query_set().earliest(*args, **kwargs)
|
|---|
| 747 | + return self.get_queryset().earliest(*args, **kwargs)
|
|---|
| 748 |
|
|---|
| 749 | def latest(self, *args, **kwargs):
|
|---|
| 750 | - return self.get_query_set().latest(*args, **kwargs)
|
|---|
| 751 | + return self.get_queryset().latest(*args, **kwargs)
|
|---|
| 752 |
|
|---|
| 753 | def order_by(self, *args, **kwargs):
|
|---|
| 754 | - return self.get_query_set().order_by(*args, **kwargs)
|
|---|
| 755 | + return self.get_queryset().order_by(*args, **kwargs)
|
|---|
| 756 |
|
|---|
| 757 | def select_for_update(self, *args, **kwargs):
|
|---|
| 758 | - return self.get_query_set().select_for_update(*args, **kwargs)
|
|---|
| 759 | + return self.get_queryset().select_for_update(*args, **kwargs)
|
|---|
| 760 |
|
|---|
| 761 | def select_related(self, *args, **kwargs):
|
|---|
| 762 | - return self.get_query_set().select_related(*args, **kwargs)
|
|---|
| 763 | + return self.get_queryset().select_related(*args, **kwargs)
|
|---|
| 764 |
|
|---|
| 765 | def prefetch_related(self, *args, **kwargs):
|
|---|
| 766 | - return self.get_query_set().prefetch_related(*args, **kwargs)
|
|---|
| 767 | + return self.get_queryset().prefetch_related(*args, **kwargs)
|
|---|
| 768 |
|
|---|
| 769 | def values(self, *args, **kwargs):
|
|---|
| 770 | - return self.get_query_set().values(*args, **kwargs)
|
|---|
| 771 | + return self.get_queryset().values(*args, **kwargs)
|
|---|
| 772 |
|
|---|
| 773 | def values_list(self, *args, **kwargs):
|
|---|
| 774 | - return self.get_query_set().values_list(*args, **kwargs)
|
|---|
| 775 | + return self.get_queryset().values_list(*args, **kwargs)
|
|---|
| 776 |
|
|---|
| 777 | def update(self, *args, **kwargs):
|
|---|
| 778 | - return self.get_query_set().update(*args, **kwargs)
|
|---|
| 779 | + return self.get_queryset().update(*args, **kwargs)
|
|---|
| 780 |
|
|---|
| 781 | def reverse(self, *args, **kwargs):
|
|---|
| 782 | - return self.get_query_set().reverse(*args, **kwargs)
|
|---|
| 783 | + return self.get_queryset().reverse(*args, **kwargs)
|
|---|
| 784 |
|
|---|
| 785 | def defer(self, *args, **kwargs):
|
|---|
| 786 | - return self.get_query_set().defer(*args, **kwargs)
|
|---|
| 787 | + return self.get_queryset().defer(*args, **kwargs)
|
|---|
| 788 |
|
|---|
| 789 | def only(self, *args, **kwargs):
|
|---|
| 790 | - return self.get_query_set().only(*args, **kwargs)
|
|---|
| 791 | + return self.get_queryset().only(*args, **kwargs)
|
|---|
| 792 |
|
|---|
| 793 | def using(self, *args, **kwargs):
|
|---|
| 794 | - return self.get_query_set().using(*args, **kwargs)
|
|---|
| 795 | + return self.get_queryset().using(*args, **kwargs)
|
|---|
| 796 |
|
|---|
| 797 | def exists(self, *args, **kwargs):
|
|---|
| 798 | - return self.get_query_set().exists(*args, **kwargs)
|
|---|
| 799 | + return self.get_queryset().exists(*args, **kwargs)
|
|---|
| 800 |
|
|---|
| 801 | def _insert(self, objs, fields, **kwargs):
|
|---|
| 802 | return insert_query(self.model, objs, fields, **kwargs)
|
|---|
| 803 |
|
|---|
| 804 | def _update(self, values, **kwargs):
|
|---|
| 805 | - return self.get_query_set()._update(values, **kwargs)
|
|---|
| 806 | + return self.get_queryset()._update(values, **kwargs)
|
|---|
| 807 |
|
|---|
| 808 | def raw(self, raw_query, params=None, *args, **kwargs):
|
|---|
| 809 | return RawQuerySet(raw_query=raw_query, model=self.model, params=params, using=self._db, *args, **kwargs)
|
|---|
| 810 | @@ -265,5 +274,5 @@ class EmptyManager(Manager):
|
|---|
| 811 | super(EmptyManager, self).__init__()
|
|---|
| 812 | self.model = model
|
|---|
| 813 |
|
|---|
| 814 | - def get_query_set(self):
|
|---|
| 815 | - return super(EmptyManager, self).get_query_set().none()
|
|---|
| 816 | + def get_queryset(self):
|
|---|
| 817 | + return super(EmptyManager, self).get_queryset().none()
|
|---|
| 818 | diff --git a/django/db/models/query.py b/django/db/models/query.py
|
|---|
| 819 | index ec35f8a..30be30c 100644
|
|---|
| 820 | --- a/django/db/models/query.py
|
|---|
| 821 | +++ b/django/db/models/query.py
|
|---|
| 822 | @@ -1733,9 +1733,9 @@ def prefetch_related_objects(result_cache, related_lookups):
|
|---|
| 823 | def get_prefetcher(instance, attr):
|
|---|
| 824 | """
|
|---|
| 825 | For the attribute 'attr' on the given instance, finds
|
|---|
| 826 | - an object that has a get_prefetch_query_set().
|
|---|
| 827 | + an object that has a get_prefetch_queryset().
|
|---|
| 828 | Returns a 4 tuple containing:
|
|---|
| 829 | - (the object with get_prefetch_query_set (or None),
|
|---|
| 830 | + (the object with get_prefetch_queryset (or None),
|
|---|
| 831 | the descriptor object representing this relationship (or None),
|
|---|
| 832 | a boolean that is False if the attribute was not found at all,
|
|---|
| 833 | a boolean that is True if the attribute has already been fetched)
|
|---|
| 834 | @@ -1758,8 +1758,8 @@ def get_prefetcher(instance, attr):
|
|---|
| 835 | attr_found = True
|
|---|
| 836 | if rel_obj_descriptor:
|
|---|
| 837 | # singly related object, descriptor object has the
|
|---|
| 838 | - # get_prefetch_query_set() method.
|
|---|
| 839 | - if hasattr(rel_obj_descriptor, 'get_prefetch_query_set'):
|
|---|
| 840 | + # get_prefetch_queryset() method.
|
|---|
| 841 | + if hasattr(rel_obj_descriptor, 'get_prefetch_queryset'):
|
|---|
| 842 | prefetcher = rel_obj_descriptor
|
|---|
| 843 | if rel_obj_descriptor.is_cached(instance):
|
|---|
| 844 | is_fetched = True
|
|---|
| 845 | @@ -1768,7 +1768,7 @@ def get_prefetcher(instance, attr):
|
|---|
| 846 | # the attribute on the instance rather than the class to
|
|---|
| 847 | # support many related managers
|
|---|
| 848 | rel_obj = getattr(instance, attr)
|
|---|
| 849 | - if hasattr(rel_obj, 'get_prefetch_query_set'):
|
|---|
| 850 | + if hasattr(rel_obj, 'get_prefetch_queryset'):
|
|---|
| 851 | prefetcher = rel_obj
|
|---|
| 852 | return prefetcher, rel_obj_descriptor, attr_found, is_fetched
|
|---|
| 853 |
|
|---|
| 854 | @@ -1784,7 +1784,7 @@ def prefetch_one_level(instances, prefetcher, attname):
|
|---|
| 855 | prefetches that must be done due to prefetch_related lookups
|
|---|
| 856 | found from default managers.
|
|---|
| 857 | """
|
|---|
| 858 | - # prefetcher must have a method get_prefetch_query_set() which takes a list
|
|---|
| 859 | + # prefetcher must have a method get_prefetch_queryset() which takes a list
|
|---|
| 860 | # of instances, and returns a tuple:
|
|---|
| 861 |
|
|---|
| 862 | # (queryset of instances of self.model that are related to passed in instances,
|
|---|
| 863 | @@ -1797,7 +1797,7 @@ def prefetch_one_level(instances, prefetcher, attname):
|
|---|
| 864 | # in a dictionary.
|
|---|
| 865 |
|
|---|
| 866 | rel_qs, rel_obj_attr, instance_attr, single, cache_name =\
|
|---|
| 867 | - prefetcher.get_prefetch_query_set(instances)
|
|---|
| 868 | + prefetcher.get_prefetch_queryset(instances)
|
|---|
| 869 | # We have to handle the possibility that the default manager itself added
|
|---|
| 870 | # prefetch_related lookups to the QuerySet we just got back. We don't want to
|
|---|
| 871 | # trigger the prefetch_related functionality by evaluating the query.
|
|---|
| 872 | diff --git a/django/forms/models.py b/django/forms/models.py
|
|---|
| 873 | index 3905e9e..b44f811 100644
|
|---|
| 874 | --- a/django/forms/models.py
|
|---|
| 875 | +++ b/django/forms/models.py
|
|---|
| 876 | @@ -479,7 +479,7 @@ class BaseModelFormSet(BaseFormSet):
|
|---|
| 877 | if self.queryset is not None:
|
|---|
| 878 | qs = self.queryset
|
|---|
| 879 | else:
|
|---|
| 880 | - qs = self.model._default_manager.get_query_set()
|
|---|
| 881 | + qs = self.model._default_manager.get_queryset()
|
|---|
| 882 |
|
|---|
| 883 | # If the queryset isn't already ordered we need to add an
|
|---|
| 884 | # artificial ordering here to make sure that all formsets
|
|---|
| 885 | @@ -669,9 +669,9 @@ class BaseModelFormSet(BaseFormSet):
|
|---|
| 886 | except IndexError:
|
|---|
| 887 | pk_value = None
|
|---|
| 888 | if isinstance(pk, OneToOneField) or isinstance(pk, ForeignKey):
|
|---|
| 889 | - qs = pk.rel.to._default_manager.get_query_set()
|
|---|
| 890 | + qs = pk.rel.to._default_manager.get_queryset()
|
|---|
| 891 | else:
|
|---|
| 892 | - qs = self.model._default_manager.get_query_set()
|
|---|
| 893 | + qs = self.model._default_manager.get_queryset()
|
|---|
| 894 | qs = qs.using(form.instance._state.db)
|
|---|
| 895 | if form._meta.widgets:
|
|---|
| 896 | widget = form._meta.widgets.get(self._pk_field.name, HiddenInput)
|
|---|
| 897 | diff --git a/django/utils/deprecation.py b/django/utils/deprecation.py
|
|---|
| 898 | new file mode 100644
|
|---|
| 899 | index 0000000..fb3d2c3
|
|---|
| 900 | --- /dev/null
|
|---|
| 901 | +++ b/django/utils/deprecation.py
|
|---|
| 902 | @@ -0,0 +1,59 @@
|
|---|
| 903 | +import inspect
|
|---|
| 904 | +import warnings
|
|---|
| 905 | +
|
|---|
| 906 | +
|
|---|
| 907 | +class warn_about_renamed_method(object):
|
|---|
| 908 | + def __init__(self, class_name, old_method_name, new_method_name):
|
|---|
| 909 | + self.class_name = class_name
|
|---|
| 910 | + self.old_method_name = old_method_name
|
|---|
| 911 | + self.new_method_name = new_method_name
|
|---|
| 912 | +
|
|---|
| 913 | + def __call__(self, f):
|
|---|
| 914 | + def wrapped(*args, **kwargs):
|
|---|
| 915 | + warnings.warn(
|
|---|
| 916 | + "`%s.%s` is deprecated, use `%s` instead." %
|
|---|
| 917 | + (self.class_name, self.old_method_name, self.new_method_name),
|
|---|
| 918 | + PendingDeprecationWarning, 2)
|
|---|
| 919 | + return f(*args, **kwargs)
|
|---|
| 920 | + return wrapped
|
|---|
| 921 | +
|
|---|
| 922 | +
|
|---|
| 923 | +class RenameMethodsBase(type):
|
|---|
| 924 | + """
|
|---|
| 925 | + Handles the deprecation paths when renaming a method.
|
|---|
| 926 | +
|
|---|
| 927 | + It does the following:
|
|---|
| 928 | + 1) Define the new method if missing and complain about it.
|
|---|
| 929 | + 2) Define the old method if missing.
|
|---|
| 930 | + 3) Complain whenever an old method is called.
|
|---|
| 931 | +
|
|---|
| 932 | + See #15363 for more details.
|
|---|
| 933 | + """
|
|---|
| 934 | +
|
|---|
| 935 | + renamed_methods = ()
|
|---|
| 936 | +
|
|---|
| 937 | + def __new__(cls, name, bases, attrs):
|
|---|
| 938 | + new_class = super(RenameMethodsBase, cls).__new__(cls, name, bases, attrs)
|
|---|
| 939 | +
|
|---|
| 940 | + for base in inspect.getmro(new_class):
|
|---|
| 941 | + for old_method_name, new_method_name in cls.renamed_methods:
|
|---|
| 942 | + old_method = base.__dict__.get(old_method_name)
|
|---|
| 943 | + new_method = base.__dict__.get(new_method_name)
|
|---|
| 944 | +
|
|---|
| 945 | + info = (base.__name__, old_method_name, new_method_name)
|
|---|
| 946 | +
|
|---|
| 947 | + # Define the new method if missing and complain about it
|
|---|
| 948 | + if not new_method and old_method:
|
|---|
| 949 | + warnings.warn(
|
|---|
| 950 | + "`%s.%s` method should be renamed `%s`." % info,
|
|---|
| 951 | + PendingDeprecationWarning, 2)
|
|---|
| 952 | + wrapped_old_method = warn_about_renamed_method(*info)(old_method)
|
|---|
| 953 | + setattr(base, new_method_name, wrapped_old_method)
|
|---|
| 954 | + setattr(base, old_method_name, wrapped_old_method)
|
|---|
| 955 | +
|
|---|
| 956 | + # Define the old method as a wrapped call to the new method.
|
|---|
| 957 | + if not old_method and new_method:
|
|---|
| 958 | + wrapped_new_method = warn_about_renamed_method(*info)(new_method)
|
|---|
| 959 | + setattr(base, old_method_name, wrapped_new_method)
|
|---|
| 960 | +
|
|---|
| 961 | + return new_class
|
|---|
| 962 | diff --git a/docs/faq/admin.txt b/docs/faq/admin.txt
|
|---|
| 963 | index 30d452c..1d9a7c7 100644
|
|---|
| 964 | --- a/docs/faq/admin.txt
|
|---|
| 965 | +++ b/docs/faq/admin.txt
|
|---|
| 966 | @@ -49,7 +49,7 @@ How do I limit admin access so that objects can only be edited by the users who
|
|---|
| 967 | The :class:`~django.contrib.admin.ModelAdmin` class also provides customization
|
|---|
| 968 | hooks that allow you to control the visibility and editability of objects in the
|
|---|
| 969 | admin. Using the same trick of extracting the user from the request, the
|
|---|
| 970 | -:meth:`~django.contrib.admin.ModelAdmin.queryset` and
|
|---|
| 971 | +:meth:`~django.contrib.admin.ModelAdmin.get_queryset` and
|
|---|
| 972 | :meth:`~django.contrib.admin.ModelAdmin.has_change_permission` can be used to
|
|---|
| 973 | control the visibility and editability of objects in the admin.
|
|---|
| 974 |
|
|---|
| 975 | diff --git a/docs/ref/contrib/admin/index.txt b/docs/ref/contrib/admin/index.txt
|
|---|
| 976 | index 9ab1984..827518d 100644
|
|---|
| 977 | --- a/docs/ref/contrib/admin/index.txt
|
|---|
| 978 | +++ b/docs/ref/contrib/admin/index.txt
|
|---|
| 979 | @@ -696,7 +696,7 @@ subclass::
|
|---|
| 980 | Only show the lookups if there actually is
|
|---|
| 981 | anyone born in the corresponding decades.
|
|---|
| 982 | """
|
|---|
| 983 | - qs = model_admin.queryset(request)
|
|---|
| 984 | + qs = model_admin.get_queryset(request)
|
|---|
| 985 | if qs.filter(birthday__gte=date(1980, 1, 1),
|
|---|
| 986 | birthday__lte=date(1989, 12, 31)).exists():
|
|---|
| 987 | yield ('80s', _('in the eighties'))
|
|---|
| 988 | @@ -1319,16 +1319,16 @@ templates used by the :class:`ModelAdmin` views:
|
|---|
| 989 | be interpreted as meaning that the current user is not permitted to delete
|
|---|
| 990 | any object of this type).
|
|---|
| 991 |
|
|---|
| 992 | -.. method:: ModelAdmin.queryset(self, request)
|
|---|
| 993 | +.. method:: ModelAdmin.get_queryset(self, request)
|
|---|
| 994 |
|
|---|
| 995 | - The ``queryset`` method on a ``ModelAdmin`` returns a
|
|---|
| 996 | + The ``get_queryset`` method on a ``ModelAdmin`` returns a
|
|---|
| 997 | :class:`~django.db.models.query.QuerySet` of all model instances that
|
|---|
| 998 | can be edited by the admin site. One use case for overriding this method
|
|---|
| 999 | is to show objects owned by the logged-in user::
|
|---|
| 1000 |
|
|---|
| 1001 | class MyModelAdmin(admin.ModelAdmin):
|
|---|
| 1002 | - def queryset(self, request):
|
|---|
| 1003 | - qs = super(MyModelAdmin, self).queryset(request)
|
|---|
| 1004 | + def get_queryset(self, request):
|
|---|
| 1005 | + qs = super(MyModelAdmin, self).get_queryset(request)
|
|---|
| 1006 | if request.user.is_superuser:
|
|---|
| 1007 | return qs
|
|---|
| 1008 | return qs.filter(author=request.user)
|
|---|
| 1009 | @@ -1542,7 +1542,7 @@ adds some of its own (the shared features are actually defined in the
|
|---|
| 1010 | - :attr:`~ModelAdmin.filter_vertical`
|
|---|
| 1011 | - :attr:`~ModelAdmin.ordering`
|
|---|
| 1012 | - :attr:`~ModelAdmin.prepopulated_fields`
|
|---|
| 1013 | -- :meth:`~ModelAdmin.queryset`
|
|---|
| 1014 | +- :meth:`~ModelAdmin.get_queryset`
|
|---|
| 1015 | - :attr:`~ModelAdmin.radio_fields`
|
|---|
| 1016 | - :attr:`~ModelAdmin.readonly_fields`
|
|---|
| 1017 | - :attr:`~InlineModelAdmin.raw_id_fields`
|
|---|
| 1018 | diff --git a/docs/ref/models/querysets.txt b/docs/ref/models/querysets.txt
|
|---|
| 1019 | index f77f87d..638deef 100644
|
|---|
| 1020 | --- a/docs/ref/models/querysets.txt
|
|---|
| 1021 | +++ b/docs/ref/models/querysets.txt
|
|---|
| 1022 | @@ -1591,32 +1591,32 @@ The most efficient method of finding whether a model with a unique field
|
|---|
| 1023 | (e.g. ``primary_key``) is a member of a :class:`.QuerySet` is::
|
|---|
| 1024 |
|
|---|
| 1025 | entry = Entry.objects.get(pk=123)
|
|---|
| 1026 | - if some_query_set.filter(pk=entry.pk).exists():
|
|---|
| 1027 | + if some_queryset.filter(pk=entry.pk).exists():
|
|---|
| 1028 | print("Entry contained in queryset")
|
|---|
| 1029 |
|
|---|
| 1030 | Which will be faster than the following which requires evaluating and iterating
|
|---|
| 1031 | through the entire queryset::
|
|---|
| 1032 |
|
|---|
| 1033 | - if entry in some_query_set:
|
|---|
| 1034 | + if entry in some_queryset:
|
|---|
| 1035 | print("Entry contained in QuerySet")
|
|---|
| 1036 |
|
|---|
| 1037 | And to find whether a queryset contains any items::
|
|---|
| 1038 |
|
|---|
| 1039 | - if some_query_set.exists():
|
|---|
| 1040 | - print("There is at least one object in some_query_set")
|
|---|
| 1041 | + if some_queryset.exists():
|
|---|
| 1042 | + print("There is at least one object in some_queryset")
|
|---|
| 1043 |
|
|---|
| 1044 | Which will be faster than::
|
|---|
| 1045 |
|
|---|
| 1046 | - if some_query_set:
|
|---|
| 1047 | - print("There is at least one object in some_query_set")
|
|---|
| 1048 | + if some_queryset:
|
|---|
| 1049 | + print("There is at least one object in some_queryset")
|
|---|
| 1050 |
|
|---|
| 1051 | ... but not by a large degree (hence needing a large queryset for efficiency
|
|---|
| 1052 | gains).
|
|---|
| 1053 |
|
|---|
| 1054 | -Additionally, if a ``some_query_set`` has not yet been evaluated, but you know
|
|---|
| 1055 | -that it will be at some point, then using ``some_query_set.exists()`` will do
|
|---|
| 1056 | +Additionally, if a ``some_queryset`` has not yet been evaluated, but you know
|
|---|
| 1057 | +that it will be at some point, then using ``some_queryset.exists()`` will do
|
|---|
| 1058 | more overall work (one query for the existence check plus an extra one to later
|
|---|
| 1059 | -retrieve the results) than simply using ``bool(some_query_set)``, which
|
|---|
| 1060 | +retrieve the results) than simply using ``bool(some_queryset)``, which
|
|---|
| 1061 | retrieves the results and then checks if any were returned.
|
|---|
| 1062 |
|
|---|
| 1063 | update
|
|---|
| 1064 | diff --git a/docs/topics/db/managers.txt b/docs/topics/db/managers.txt
|
|---|
| 1065 | index a14616a..a90085f 100644
|
|---|
| 1066 | --- a/docs/topics/db/managers.txt
|
|---|
| 1067 | +++ b/docs/topics/db/managers.txt
|
|---|
| 1068 | @@ -108,7 +108,7 @@ example, using this model::
|
|---|
| 1069 | ...the statement ``Book.objects.all()`` will return all books in the database.
|
|---|
| 1070 |
|
|---|
| 1071 | You can override a ``Manager``\'s base ``QuerySet`` by overriding the
|
|---|
| 1072 | -``Manager.get_query_set()`` method. ``get_query_set()`` should return a
|
|---|
| 1073 | +``Manager.get_queryset()`` method. ``get_queryset()`` should return a
|
|---|
| 1074 | ``QuerySet`` with the properties you require.
|
|---|
| 1075 |
|
|---|
| 1076 | For example, the following model has *two* ``Manager``\s -- one that returns
|
|---|
| 1077 | @@ -116,8 +116,8 @@ all objects, and one that returns only the books by Roald Dahl::
|
|---|
| 1078 |
|
|---|
| 1079 | # First, define the Manager subclass.
|
|---|
| 1080 | class DahlBookManager(models.Manager):
|
|---|
| 1081 | - def get_query_set(self):
|
|---|
| 1082 | - return super(DahlBookManager, self).get_query_set().filter(author='Roald Dahl')
|
|---|
| 1083 | + def get_queryset(self):
|
|---|
| 1084 | + return super(DahlBookManager, self).get_queryset().filter(author='Roald Dahl')
|
|---|
| 1085 |
|
|---|
| 1086 | # Then hook it into the Book model explicitly.
|
|---|
| 1087 | class Book(models.Model):
|
|---|
| 1088 | @@ -131,7 +131,7 @@ With this sample model, ``Book.objects.all()`` will return all books in the
|
|---|
| 1089 | database, but ``Book.dahl_objects.all()`` will only return the ones written by
|
|---|
| 1090 | Roald Dahl.
|
|---|
| 1091 |
|
|---|
| 1092 | -Of course, because ``get_query_set()`` returns a ``QuerySet`` object, you can
|
|---|
| 1093 | +Of course, because ``get_queryset()`` returns a ``QuerySet`` object, you can
|
|---|
| 1094 | use ``filter()``, ``exclude()`` and all the other ``QuerySet`` methods on it.
|
|---|
| 1095 | So these statements are all legal::
|
|---|
| 1096 |
|
|---|
| 1097 | @@ -147,12 +147,12 @@ models.
|
|---|
| 1098 | For example::
|
|---|
| 1099 |
|
|---|
| 1100 | class MaleManager(models.Manager):
|
|---|
| 1101 | - def get_query_set(self):
|
|---|
| 1102 | - return super(MaleManager, self).get_query_set().filter(sex='M')
|
|---|
| 1103 | + def get_queryset(self):
|
|---|
| 1104 | + return super(MaleManager, self).get_queryset().filter(sex='M')
|
|---|
| 1105 |
|
|---|
| 1106 | class FemaleManager(models.Manager):
|
|---|
| 1107 | - def get_query_set(self):
|
|---|
| 1108 | - return super(FemaleManager, self).get_query_set().filter(sex='F')
|
|---|
| 1109 | + def get_queryset(self):
|
|---|
| 1110 | + return super(FemaleManager, self).get_queryset().filter(sex='F')
|
|---|
| 1111 |
|
|---|
| 1112 | class Person(models.Model):
|
|---|
| 1113 | first_name = models.CharField(max_length=50)
|
|---|
| 1114 | @@ -172,7 +172,7 @@ the "default" ``Manager``, and several parts of Django
|
|---|
| 1115 | (including :djadmin:`dumpdata`) will use that ``Manager``
|
|---|
| 1116 | exclusively for that model. As a result, it's a good idea to be careful in
|
|---|
| 1117 | your choice of default manager in order to avoid a situation where overriding
|
|---|
| 1118 | -``get_query_set()`` results in an inability to retrieve objects you'd like to
|
|---|
| 1119 | +``get_queryset()`` results in an inability to retrieve objects you'd like to
|
|---|
| 1120 | work with.
|
|---|
| 1121 |
|
|---|
| 1122 | .. _managers-for-related-objects:
|
|---|
| 1123 | @@ -379,9 +379,9 @@ to from some other model. In those situations, Django has to be able to see
|
|---|
| 1124 | all the objects for the model it is fetching, so that *anything* which is
|
|---|
| 1125 | referred to can be retrieved.
|
|---|
| 1126 |
|
|---|
| 1127 | -If you override the ``get_query_set()`` method and filter out any rows, Django
|
|---|
| 1128 | +If you override the ``get_queryset()`` method and filter out any rows, Django
|
|---|
| 1129 | will return incorrect results. Don't do that. A manager that filters results
|
|---|
| 1130 | -in ``get_query_set()`` is not appropriate for use as an automatic manager.
|
|---|
| 1131 | +in ``get_queryset()`` is not appropriate for use as an automatic manager.
|
|---|
| 1132 |
|
|---|
| 1133 | Set ``use_for_related_fields`` when you define the class
|
|---|
| 1134 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|---|
| 1135 | diff --git a/docs/topics/db/multi-db.txt b/docs/topics/db/multi-db.txt
|
|---|
| 1136 | index 8150e49..ae23c3d 100644
|
|---|
| 1137 | --- a/docs/topics/db/multi-db.txt
|
|---|
| 1138 | +++ b/docs/topics/db/multi-db.txt
|
|---|
| 1139 | @@ -506,19 +506,19 @@ solution is to use ``db_manager()``, like this::
|
|---|
| 1140 |
|
|---|
| 1141 | ``db_manager()`` returns a copy of the manager bound to the database you specify.
|
|---|
| 1142 |
|
|---|
| 1143 | -Using ``get_query_set()`` with multiple databases
|
|---|
| 1144 | +Using ``get_queryset()`` with multiple databases
|
|---|
| 1145 | ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|---|
| 1146 |
|
|---|
| 1147 | -If you're overriding ``get_query_set()`` on your manager, be sure to
|
|---|
| 1148 | +If you're overriding ``get_queryset()`` on your manager, be sure to
|
|---|
| 1149 | either call the method on the parent (using ``super()``) or do the
|
|---|
| 1150 | appropriate handling of the ``_db`` attribute on the manager (a string
|
|---|
| 1151 | containing the name of the database to use).
|
|---|
| 1152 |
|
|---|
| 1153 | For example, if you want to return a custom ``QuerySet`` class from
|
|---|
| 1154 | -the ``get_query_set`` method, you could do this::
|
|---|
| 1155 | +the ``get_queryset`` method, you could do this::
|
|---|
| 1156 |
|
|---|
| 1157 | class MyManager(models.Manager):
|
|---|
| 1158 | - def get_query_set(self):
|
|---|
| 1159 | + def get_queryset(self):
|
|---|
| 1160 | qs = CustomQuerySet(self.model)
|
|---|
| 1161 | if self._db is not None:
|
|---|
| 1162 | qs = qs.using(self._db)
|
|---|
| 1163 | @@ -548,9 +548,9 @@ multiple-database support::
|
|---|
| 1164 | # Tell Django to delete objects from the 'other' database
|
|---|
| 1165 | obj.delete(using=self.using)
|
|---|
| 1166 |
|
|---|
| 1167 | - def queryset(self, request):
|
|---|
| 1168 | + def get_queryset(self, request):
|
|---|
| 1169 | # Tell Django to look for objects on the 'other' database.
|
|---|
| 1170 | - return super(MultiDBModelAdmin, self).queryset(request).using(self.using)
|
|---|
| 1171 | + return super(MultiDBModelAdmin, self).get_queryset(request).using(self.using)
|
|---|
| 1172 |
|
|---|
| 1173 | def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
|
|---|
| 1174 | # Tell Django to populate ForeignKey widgets using a query
|
|---|
| 1175 | @@ -573,9 +573,9 @@ Inlines can be handled in a similar fashion. They require three customized metho
|
|---|
| 1176 | class MultiDBTabularInline(admin.TabularInline):
|
|---|
| 1177 | using = 'other'
|
|---|
| 1178 |
|
|---|
| 1179 | - def queryset(self, request):
|
|---|
| 1180 | + def get_queryset(self, request):
|
|---|
| 1181 | # Tell Django to look for inline objects on the 'other' database.
|
|---|
| 1182 | - return super(MultiDBTabularInline, self).queryset(request).using(self.using)
|
|---|
| 1183 | + return super(MultiDBTabularInline, self).get_queryset(request).using(self.using)
|
|---|
| 1184 |
|
|---|
| 1185 | def formfield_for_foreignkey(self, db_field, request=None, **kwargs):
|
|---|
| 1186 | # Tell Django to populate ForeignKey widgets using a query
|
|---|
| 1187 | diff --git a/tests/admin_changelist/admin.py b/tests/admin_changelist/admin.py
|
|---|
| 1188 | index 5751d04..8387ba7 100644
|
|---|
| 1189 | --- a/tests/admin_changelist/admin.py
|
|---|
| 1190 | +++ b/tests/admin_changelist/admin.py
|
|---|
| 1191 | @@ -34,8 +34,8 @@ class ChildAdmin(admin.ModelAdmin):
|
|---|
| 1192 | list_per_page = 10
|
|---|
| 1193 | list_filter = ['parent', 'age']
|
|---|
| 1194 |
|
|---|
| 1195 | - def queryset(self, request):
|
|---|
| 1196 | - return super(ChildAdmin, self).queryset(request).select_related("parent__name")
|
|---|
| 1197 | + def get_queryset(self, request):
|
|---|
| 1198 | + return super(ChildAdmin, self).get_queryset(request).select_related("parent__name")
|
|---|
| 1199 |
|
|---|
| 1200 |
|
|---|
| 1201 | class CustomPaginationAdmin(ChildAdmin):
|
|---|
| 1202 | @@ -46,8 +46,8 @@ class FilteredChildAdmin(admin.ModelAdmin):
|
|---|
| 1203 | list_display = ['name', 'parent']
|
|---|
| 1204 | list_per_page = 10
|
|---|
| 1205 |
|
|---|
| 1206 | - def queryset(self, request):
|
|---|
| 1207 | - return super(FilteredChildAdmin, self).queryset(request).filter(
|
|---|
| 1208 | + def get_queryset(self, request):
|
|---|
| 1209 | + return super(FilteredChildAdmin, self).get_queryset(request).filter(
|
|---|
| 1210 | name__contains='filtered')
|
|---|
| 1211 |
|
|---|
| 1212 |
|
|---|
| 1213 | diff --git a/tests/admin_changelist/models.py b/tests/admin_changelist/models.py
|
|---|
| 1214 | index 4ba2f9c..786b438 100644
|
|---|
| 1215 | --- a/tests/admin_changelist/models.py
|
|---|
| 1216 | +++ b/tests/admin_changelist/models.py
|
|---|
| 1217 | @@ -74,8 +74,8 @@ class UnorderedObject(models.Model):
|
|---|
| 1218 |
|
|---|
| 1219 |
|
|---|
| 1220 | class OrderedObjectManager(models.Manager):
|
|---|
| 1221 | - def get_query_set(self):
|
|---|
| 1222 | - return super(OrderedObjectManager, self).get_query_set().order_by('number')
|
|---|
| 1223 | + def get_queryset(self):
|
|---|
| 1224 | + return super(OrderedObjectManager, self).get_queryset().order_by('number')
|
|---|
| 1225 |
|
|---|
| 1226 | class OrderedObject(models.Model):
|
|---|
| 1227 | """
|
|---|
| 1228 | diff --git a/tests/admin_changelist/tests.py b/tests/admin_changelist/tests.py
|
|---|
| 1229 | index bb39f22..5958792 100644
|
|---|
| 1230 | --- a/tests/admin_changelist/tests.py
|
|---|
| 1231 | +++ b/tests/admin_changelist/tests.py
|
|---|
| 1232 | @@ -39,8 +39,8 @@ class ChangeListTests(TestCase):
|
|---|
| 1233 |
|
|---|
| 1234 | def test_select_related_preserved(self):
|
|---|
| 1235 | """
|
|---|
| 1236 | - Regression test for #10348: ChangeList.get_query_set() shouldn't
|
|---|
| 1237 | - overwrite a custom select_related provided by ModelAdmin.queryset().
|
|---|
| 1238 | + Regression test for #10348: ChangeList.get_queryset() shouldn't
|
|---|
| 1239 | + overwrite a custom select_related provided by ModelAdmin.get_queryset().
|
|---|
| 1240 | """
|
|---|
| 1241 | m = ChildAdmin(Child, admin.site)
|
|---|
| 1242 | request = self.factory.get('/child/')
|
|---|
| 1243 | diff --git a/tests/admin_filters/tests.py b/tests/admin_filters/tests.py
|
|---|
| 1244 | index 11f792e..f05e8e2 100644
|
|---|
| 1245 | --- a/tests/admin_filters/tests.py
|
|---|
| 1246 | +++ b/tests/admin_filters/tests.py
|
|---|
| 1247 | @@ -61,7 +61,7 @@ class DecadeListFilterWithFailingQueryset(DecadeListFilterWithTitleAndParameter)
|
|---|
| 1248 | class DecadeListFilterWithQuerysetBasedLookups(DecadeListFilterWithTitleAndParameter):
|
|---|
| 1249 |
|
|---|
| 1250 | def lookups(self, request, model_admin):
|
|---|
| 1251 | - qs = model_admin.queryset(request)
|
|---|
| 1252 | + qs = model_admin.get_queryset(request)
|
|---|
| 1253 | if qs.filter(year__gte=1980, year__lte=1989).exists():
|
|---|
| 1254 | yield ('the 80s', "the 1980's")
|
|---|
| 1255 | if qs.filter(year__gte=1990, year__lte=1999).exists():
|
|---|
| 1256 | @@ -86,7 +86,7 @@ class DepartmentListFilterLookupWithNonStringValue(SimpleListFilter):
|
|---|
| 1257 | return sorted(set([
|
|---|
| 1258 | (employee.department.id, # Intentionally not a string (Refs #19318)
|
|---|
| 1259 | employee.department.code)
|
|---|
| 1260 | - for employee in model_admin.queryset(request).all()
|
|---|
| 1261 | + for employee in model_admin.get_queryset(request).all()
|
|---|
| 1262 | ]))
|
|---|
| 1263 |
|
|---|
| 1264 | def queryset(self, request, queryset):
|
|---|
| 1265 | @@ -183,7 +183,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1266 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1267 |
|
|---|
| 1268 | # Make sure the correct queryset is returned
|
|---|
| 1269 | - queryset = changelist.get_query_set(request)
|
|---|
| 1270 | + queryset = changelist.get_queryset(request)
|
|---|
| 1271 | self.assertEqual(list(queryset), [self.django_book, self.djangonaut_book])
|
|---|
| 1272 |
|
|---|
| 1273 | # Make sure the correct choice is selected
|
|---|
| 1274 | @@ -200,7 +200,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1275 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1276 |
|
|---|
| 1277 | # Make sure the correct queryset is returned
|
|---|
| 1278 | - queryset = changelist.get_query_set(request)
|
|---|
| 1279 | + queryset = changelist.get_queryset(request)
|
|---|
| 1280 | if (self.today.year, self.today.month) == (self.one_week_ago.year, self.one_week_ago.month):
|
|---|
| 1281 | # In case one week ago is in the same month.
|
|---|
| 1282 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
|---|
| 1283 | @@ -221,7 +221,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1284 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1285 |
|
|---|
| 1286 | # Make sure the correct queryset is returned
|
|---|
| 1287 | - queryset = changelist.get_query_set(request)
|
|---|
| 1288 | + queryset = changelist.get_queryset(request)
|
|---|
| 1289 | if self.today.year == self.one_week_ago.year:
|
|---|
| 1290 | # In case one week ago is in the same year.
|
|---|
| 1291 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
|---|
| 1292 | @@ -242,7 +242,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1293 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1294 |
|
|---|
| 1295 | # Make sure the correct queryset is returned
|
|---|
| 1296 | - queryset = changelist.get_query_set(request)
|
|---|
| 1297 | + queryset = changelist.get_queryset(request)
|
|---|
| 1298 | self.assertEqual(list(queryset), [self.gipsy_book, self.django_book, self.djangonaut_book])
|
|---|
| 1299 |
|
|---|
| 1300 | # Make sure the correct choice is selected
|
|---|
| 1301 | @@ -266,7 +266,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1302 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1303 |
|
|---|
| 1304 | # Make sure the correct queryset is returned
|
|---|
| 1305 | - queryset = changelist.get_query_set(request)
|
|---|
| 1306 | + queryset = changelist.get_queryset(request)
|
|---|
| 1307 | self.assertEqual(list(queryset), [self.django_book])
|
|---|
| 1308 |
|
|---|
| 1309 | # Make sure the last choice is None and is selected
|
|---|
| 1310 | @@ -293,7 +293,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1311 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1312 |
|
|---|
| 1313 | # Make sure the correct queryset is returned
|
|---|
| 1314 | - queryset = changelist.get_query_set(request)
|
|---|
| 1315 | + queryset = changelist.get_queryset(request)
|
|---|
| 1316 | self.assertEqual(list(queryset), [self.gipsy_book])
|
|---|
| 1317 |
|
|---|
| 1318 | # Make sure the last choice is None and is selected
|
|---|
| 1319 | @@ -321,7 +321,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1320 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1321 |
|
|---|
| 1322 | # Make sure the correct queryset is returned
|
|---|
| 1323 | - queryset = changelist.get_query_set(request)
|
|---|
| 1324 | + queryset = changelist.get_queryset(request)
|
|---|
| 1325 | self.assertEqual(list(queryset), [self.django_book, self.bio_book, self.djangonaut_book])
|
|---|
| 1326 |
|
|---|
| 1327 | # Make sure the last choice is None and is selected
|
|---|
| 1328 | @@ -349,7 +349,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1329 | changelist = self.get_changelist(request, User, modeladmin)
|
|---|
| 1330 |
|
|---|
| 1331 | # Make sure the correct queryset is returned
|
|---|
| 1332 | - queryset = changelist.get_query_set(request)
|
|---|
| 1333 | + queryset = changelist.get_queryset(request)
|
|---|
| 1334 | self.assertEqual(list(queryset), [self.lisa])
|
|---|
| 1335 |
|
|---|
| 1336 | # Make sure the last choice is None and is selected
|
|---|
| 1337 | @@ -374,7 +374,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1338 | changelist = self.get_changelist(request, User, modeladmin)
|
|---|
| 1339 |
|
|---|
| 1340 | # Make sure the correct queryset is returned
|
|---|
| 1341 | - queryset = changelist.get_query_set(request)
|
|---|
| 1342 | + queryset = changelist.get_queryset(request)
|
|---|
| 1343 | self.assertEqual(list(queryset), [self.alfred])
|
|---|
| 1344 |
|
|---|
| 1345 | # Make sure the last choice is None and is selected
|
|---|
| 1346 | @@ -410,7 +410,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1347 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1348 |
|
|---|
| 1349 | # Make sure the correct queryset is returned
|
|---|
| 1350 | - queryset = changelist.get_query_set(request)
|
|---|
| 1351 | + queryset = changelist.get_queryset(request)
|
|---|
| 1352 | self.assertEqual(list(queryset), [self.bio_book])
|
|---|
| 1353 |
|
|---|
| 1354 | # Make sure the correct choice is selected
|
|---|
| 1355 | @@ -424,7 +424,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1356 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1357 |
|
|---|
| 1358 | # Make sure the correct queryset is returned
|
|---|
| 1359 | - queryset = changelist.get_query_set(request)
|
|---|
| 1360 | + queryset = changelist.get_queryset(request)
|
|---|
| 1361 | self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
|
|---|
| 1362 |
|
|---|
| 1363 | # Make sure the correct choice is selected
|
|---|
| 1364 | @@ -438,7 +438,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1365 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1366 |
|
|---|
| 1367 | # Make sure the correct queryset is returned
|
|---|
| 1368 | - queryset = changelist.get_query_set(request)
|
|---|
| 1369 | + queryset = changelist.get_queryset(request)
|
|---|
| 1370 | self.assertEqual(list(queryset), [self.django_book])
|
|---|
| 1371 |
|
|---|
| 1372 | # Make sure the correct choice is selected
|
|---|
| 1373 | @@ -457,7 +457,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1374 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1375 |
|
|---|
| 1376 | # Make sure the correct queryset is returned
|
|---|
| 1377 | - queryset = changelist.get_query_set(request)
|
|---|
| 1378 | + queryset = changelist.get_queryset(request)
|
|---|
| 1379 | self.assertEqual(list(queryset), list(Book.objects.all().order_by('-id')))
|
|---|
| 1380 |
|
|---|
| 1381 | # Make sure the correct choice is selected
|
|---|
| 1382 | @@ -474,7 +474,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1383 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1384 |
|
|---|
| 1385 | # Make sure the correct queryset is returned
|
|---|
| 1386 | - queryset = changelist.get_query_set(request)
|
|---|
| 1387 | + queryset = changelist.get_queryset(request)
|
|---|
| 1388 | self.assertEqual(list(queryset), [])
|
|---|
| 1389 |
|
|---|
| 1390 | # Make sure the correct choice is selected
|
|---|
| 1391 | @@ -491,7 +491,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1392 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1393 |
|
|---|
| 1394 | # Make sure the correct queryset is returned
|
|---|
| 1395 | - queryset = changelist.get_query_set(request)
|
|---|
| 1396 | + queryset = changelist.get_queryset(request)
|
|---|
| 1397 | self.assertEqual(list(queryset), [self.bio_book])
|
|---|
| 1398 |
|
|---|
| 1399 | # Make sure the correct choice is selected
|
|---|
| 1400 | @@ -508,7 +508,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1401 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1402 |
|
|---|
| 1403 | # Make sure the correct queryset is returned
|
|---|
| 1404 | - queryset = changelist.get_query_set(request)
|
|---|
| 1405 | + queryset = changelist.get_queryset(request)
|
|---|
| 1406 | self.assertEqual(list(queryset), [self.gipsy_book, self.djangonaut_book])
|
|---|
| 1407 |
|
|---|
| 1408 | # Make sure the correct choice is selected
|
|---|
| 1409 | @@ -525,7 +525,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1410 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1411 |
|
|---|
| 1412 | # Make sure the correct queryset is returned
|
|---|
| 1413 | - queryset = changelist.get_query_set(request)
|
|---|
| 1414 | + queryset = changelist.get_queryset(request)
|
|---|
| 1415 | self.assertEqual(list(queryset), [self.djangonaut_book])
|
|---|
| 1416 |
|
|---|
| 1417 | # Make sure the correct choices are selected
|
|---|
| 1418 | @@ -615,7 +615,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1419 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1420 |
|
|---|
| 1421 | # Make sure the correct queryset is returned
|
|---|
| 1422 | - queryset = changelist.get_query_set(request)
|
|---|
| 1423 | + queryset = changelist.get_queryset(request)
|
|---|
| 1424 | self.assertEqual(list(queryset), [self.bio_book])
|
|---|
| 1425 |
|
|---|
| 1426 | filterspec = changelist.get_filters(request)[0][-1]
|
|---|
| 1427 | @@ -637,7 +637,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1428 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1429 |
|
|---|
| 1430 | # Make sure the correct queryset is returned
|
|---|
| 1431 | - queryset = changelist.get_query_set(request)
|
|---|
| 1432 | + queryset = changelist.get_queryset(request)
|
|---|
| 1433 | self.assertEqual(list(queryset), [self.bio_book])
|
|---|
| 1434 |
|
|---|
| 1435 | # Make sure the correct choice is selected
|
|---|
| 1436 | @@ -654,7 +654,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1437 | changelist = self.get_changelist(request, Book, modeladmin)
|
|---|
| 1438 |
|
|---|
| 1439 | # Make sure the correct queryset is returned
|
|---|
| 1440 | - queryset = changelist.get_query_set(request)
|
|---|
| 1441 | + queryset = changelist.get_queryset(request)
|
|---|
| 1442 | self.assertEqual(list(queryset), [self.bio_book])
|
|---|
| 1443 |
|
|---|
| 1444 | # Make sure the correct choice is selected
|
|---|
| 1445 | @@ -676,7 +676,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1446 | request = self.request_factory.get('/', {'department': self.john.pk})
|
|---|
| 1447 | changelist = self.get_changelist(request, Employee, modeladmin)
|
|---|
| 1448 |
|
|---|
| 1449 | - queryset = changelist.get_query_set(request)
|
|---|
| 1450 | + queryset = changelist.get_queryset(request)
|
|---|
| 1451 |
|
|---|
| 1452 | self.assertEqual(list(queryset), [self.john])
|
|---|
| 1453 |
|
|---|
| 1454 | @@ -698,7 +698,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1455 | changelist = self.get_changelist(request, Employee, modeladmin)
|
|---|
| 1456 |
|
|---|
| 1457 | # Make sure the correct queryset is returned
|
|---|
| 1458 | - queryset = changelist.get_query_set(request)
|
|---|
| 1459 | + queryset = changelist.get_queryset(request)
|
|---|
| 1460 | self.assertEqual(list(queryset), [self.jack, self.john])
|
|---|
| 1461 |
|
|---|
| 1462 | filterspec = changelist.get_filters(request)[0][-1]
|
|---|
| 1463 | @@ -723,7 +723,7 @@ class ListFiltersTests(TestCase):
|
|---|
| 1464 | changelist = self.get_changelist(request, Employee, modeladmin)
|
|---|
| 1465 |
|
|---|
| 1466 | # Make sure the correct queryset is returned
|
|---|
| 1467 | - queryset = changelist.get_query_set(request)
|
|---|
| 1468 | + queryset = changelist.get_queryset(request)
|
|---|
| 1469 | self.assertEqual(list(queryset), [self.john])
|
|---|
| 1470 |
|
|---|
| 1471 | filterspec = changelist.get_filters(request)[0][-1]
|
|---|
| 1472 | diff --git a/tests/admin_ordering/tests.py b/tests/admin_ordering/tests.py
|
|---|
| 1473 | index faae834..26b720b 100644
|
|---|
| 1474 | --- a/tests/admin_ordering/tests.py
|
|---|
| 1475 | +++ b/tests/admin_ordering/tests.py
|
|---|
| 1476 | @@ -21,8 +21,8 @@ request.user = MockSuperUser()
|
|---|
| 1477 |
|
|---|
| 1478 | class TestAdminOrdering(TestCase):
|
|---|
| 1479 | """
|
|---|
| 1480 | - Let's make sure that ModelAdmin.queryset uses the ordering we define in
|
|---|
| 1481 | - ModelAdmin rather that ordering defined in the model's inner Meta
|
|---|
| 1482 | + Let's make sure that ModelAdmin.get_queryset uses the ordering we define
|
|---|
| 1483 | + in ModelAdmin rather that ordering defined in the model's inner Meta
|
|---|
| 1484 | class.
|
|---|
| 1485 | """
|
|---|
| 1486 |
|
|---|
| 1487 | @@ -41,7 +41,7 @@ class TestAdminOrdering(TestCase):
|
|---|
| 1488 | class.
|
|---|
| 1489 | """
|
|---|
| 1490 | ma = ModelAdmin(Band, None)
|
|---|
| 1491 | - names = [b.name for b in ma.queryset(request)]
|
|---|
| 1492 | + names = [b.name for b in ma.get_queryset(request)]
|
|---|
| 1493 | self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names)
|
|---|
| 1494 |
|
|---|
| 1495 | def test_specified_ordering(self):
|
|---|
| 1496 | @@ -52,7 +52,7 @@ class TestAdminOrdering(TestCase):
|
|---|
| 1497 | class BandAdmin(ModelAdmin):
|
|---|
| 1498 | ordering = ('rank',) # default ordering is ('name',)
|
|---|
| 1499 | ma = BandAdmin(Band, None)
|
|---|
| 1500 | - names = [b.name for b in ma.queryset(request)]
|
|---|
| 1501 | + names = [b.name for b in ma.get_queryset(request)]
|
|---|
| 1502 | self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names)
|
|---|
| 1503 |
|
|---|
| 1504 | def test_dynamic_ordering(self):
|
|---|
| 1505 | @@ -64,17 +64,17 @@ class TestAdminOrdering(TestCase):
|
|---|
| 1506 | request = self.request_factory.get('/')
|
|---|
| 1507 | request.user = super_user
|
|---|
| 1508 | ma = DynOrderingBandAdmin(Band, None)
|
|---|
| 1509 | - names = [b.name for b in ma.queryset(request)]
|
|---|
| 1510 | + names = [b.name for b in ma.get_queryset(request)]
|
|---|
| 1511 | self.assertEqual(['Radiohead', 'Van Halen', 'Aerosmith'], names)
|
|---|
| 1512 | request.user = other_user
|
|---|
| 1513 | - names = [b.name for b in ma.queryset(request)]
|
|---|
| 1514 | + names = [b.name for b in ma.get_queryset(request)]
|
|---|
| 1515 | self.assertEqual(['Aerosmith', 'Radiohead', 'Van Halen'], names)
|
|---|
| 1516 |
|
|---|
| 1517 |
|
|---|
| 1518 | class TestInlineModelAdminOrdering(TestCase):
|
|---|
| 1519 | """
|
|---|
| 1520 | - Let's make sure that InlineModelAdmin.queryset uses the ordering we define
|
|---|
| 1521 | - in InlineModelAdmin.
|
|---|
| 1522 | + Let's make sure that InlineModelAdmin.get_queryset uses the ordering we
|
|---|
| 1523 | + define in InlineModelAdmin.
|
|---|
| 1524 | """
|
|---|
| 1525 |
|
|---|
| 1526 | def setUp(self):
|
|---|
| 1527 | @@ -94,7 +94,7 @@ class TestInlineModelAdminOrdering(TestCase):
|
|---|
| 1528 | class.
|
|---|
| 1529 | """
|
|---|
| 1530 | inline = SongInlineDefaultOrdering(self.b, None)
|
|---|
| 1531 | - names = [s.name for s in inline.queryset(request)]
|
|---|
| 1532 | + names = [s.name for s in inline.get_queryset(request)]
|
|---|
| 1533 | self.assertEqual(['Dude (Looks Like a Lady)', 'Jaded', 'Pink'], names)
|
|---|
| 1534 |
|
|---|
| 1535 | def test_specified_ordering(self):
|
|---|
| 1536 | @@ -102,5 +102,5 @@ class TestInlineModelAdminOrdering(TestCase):
|
|---|
| 1537 | Let's check with ordering set to something different than the default.
|
|---|
| 1538 | """
|
|---|
| 1539 | inline = SongInlineNewOrdering(self.b, None)
|
|---|
| 1540 | - names = [s.name for s in inline.queryset(request)]
|
|---|
| 1541 | + names = [s.name for s in inline.get_queryset(request)]
|
|---|
| 1542 | self.assertEqual(['Jaded', 'Pink', 'Dude (Looks Like a Lady)'], names)
|
|---|
| 1543 | diff --git a/tests/admin_views/admin.py b/tests/admin_views/admin.py
|
|---|
| 1544 | index d434896..06451ab 100644
|
|---|
| 1545 | --- a/tests/admin_views/admin.py
|
|---|
| 1546 | +++ b/tests/admin_views/admin.py
|
|---|
| 1547 | @@ -177,10 +177,10 @@ class PersonAdmin(admin.ModelAdmin):
|
|---|
| 1548 | return super(PersonAdmin, self).get_changelist_formset(request,
|
|---|
| 1549 | formset=BasePersonModelFormSet, **kwargs)
|
|---|
| 1550 |
|
|---|
| 1551 | - def queryset(self, request):
|
|---|
| 1552 | + def get_queryset(self, request):
|
|---|
| 1553 | # Order by a field that isn't in list display, to be able to test
|
|---|
| 1554 | # whether ordering is preserved.
|
|---|
| 1555 | - return super(PersonAdmin, self).queryset(request).order_by('age')
|
|---|
| 1556 | + return super(PersonAdmin, self).get_queryset(request).order_by('age')
|
|---|
| 1557 |
|
|---|
| 1558 |
|
|---|
| 1559 | class FooAccount(Account):
|
|---|
| 1560 | @@ -283,8 +283,8 @@ class ParentAdmin(admin.ModelAdmin):
|
|---|
| 1561 |
|
|---|
| 1562 |
|
|---|
| 1563 | class EmptyModelAdmin(admin.ModelAdmin):
|
|---|
| 1564 | - def queryset(self, request):
|
|---|
| 1565 | - return super(EmptyModelAdmin, self).queryset(request).filter(pk__gt=1)
|
|---|
| 1566 | + def get_queryset(self, request):
|
|---|
| 1567 | + return super(EmptyModelAdmin, self).get_queryset(request).filter(pk__gt=1)
|
|---|
| 1568 |
|
|---|
| 1569 |
|
|---|
| 1570 | class OldSubscriberAdmin(admin.ModelAdmin):
|
|---|
| 1571 | @@ -427,7 +427,7 @@ class PostAdmin(admin.ModelAdmin):
|
|---|
| 1572 |
|
|---|
| 1573 |
|
|---|
| 1574 | class CustomChangeList(ChangeList):
|
|---|
| 1575 | - def get_query_set(self, request):
|
|---|
| 1576 | + def get_queryset(self, request):
|
|---|
| 1577 | return self.root_query_set.filter(pk=9999) # Does not exist
|
|---|
| 1578 |
|
|---|
| 1579 |
|
|---|
| 1580 | @@ -452,52 +452,52 @@ class FoodDeliveryAdmin(admin.ModelAdmin):
|
|---|
| 1581 |
|
|---|
| 1582 | class CoverLetterAdmin(admin.ModelAdmin):
|
|---|
| 1583 | """
|
|---|
| 1584 | - A ModelAdmin with a custom queryset() method that uses defer(), to test
|
|---|
| 1585 | + A ModelAdmin with a custom get_queryset() method that uses defer(), to test
|
|---|
| 1586 | verbose_name display in messages shown after adding/editing CoverLetter
|
|---|
| 1587 | instances.
|
|---|
| 1588 | Note that the CoverLetter model defines a __unicode__ method.
|
|---|
| 1589 | For testing fix for ticket #14529.
|
|---|
| 1590 | """
|
|---|
| 1591 |
|
|---|
| 1592 | - def queryset(self, request):
|
|---|
| 1593 | - return super(CoverLetterAdmin, self).queryset(request).defer('date_written')
|
|---|
| 1594 | + def get_queryset(self, request):
|
|---|
| 1595 | + return super(CoverLetterAdmin, self).get_queryset(request).defer('date_written')
|
|---|
| 1596 |
|
|---|
| 1597 |
|
|---|
| 1598 | class PaperAdmin(admin.ModelAdmin):
|
|---|
| 1599 | """
|
|---|
| 1600 | - A ModelAdmin with a custom queryset() method that uses only(), to test
|
|---|
| 1601 | + A ModelAdmin with a custom get_queryset() method that uses only(), to test
|
|---|
| 1602 | verbose_name display in messages shown after adding/editing Paper
|
|---|
| 1603 | instances.
|
|---|
| 1604 | For testing fix for ticket #14529.
|
|---|
| 1605 | """
|
|---|
| 1606 |
|
|---|
| 1607 | - def queryset(self, request):
|
|---|
| 1608 | - return super(PaperAdmin, self).queryset(request).only('title')
|
|---|
| 1609 | + def get_queryset(self, request):
|
|---|
| 1610 | + return super(PaperAdmin, self).get_queryset(request).only('title')
|
|---|
| 1611 |
|
|---|
| 1612 |
|
|---|
| 1613 | class ShortMessageAdmin(admin.ModelAdmin):
|
|---|
| 1614 | """
|
|---|
| 1615 | - A ModelAdmin with a custom queryset() method that uses defer(), to test
|
|---|
| 1616 | + A ModelAdmin with a custom get_queryset() method that uses defer(), to test
|
|---|
| 1617 | verbose_name display in messages shown after adding/editing ShortMessage
|
|---|
| 1618 | instances.
|
|---|
| 1619 | For testing fix for ticket #14529.
|
|---|
| 1620 | """
|
|---|
| 1621 |
|
|---|
| 1622 | - def queryset(self, request):
|
|---|
| 1623 | - return super(ShortMessageAdmin, self).queryset(request).defer('timestamp')
|
|---|
| 1624 | + def get_queryset(self, request):
|
|---|
| 1625 | + return super(ShortMessageAdmin, self).get_queryset(request).defer('timestamp')
|
|---|
| 1626 |
|
|---|
| 1627 |
|
|---|
| 1628 | class TelegramAdmin(admin.ModelAdmin):
|
|---|
| 1629 | """
|
|---|
| 1630 | - A ModelAdmin with a custom queryset() method that uses only(), to test
|
|---|
| 1631 | + A ModelAdmin with a custom get_queryset() method that uses only(), to test
|
|---|
| 1632 | verbose_name display in messages shown after adding/editing Telegram
|
|---|
| 1633 | instances.
|
|---|
| 1634 | Note that the Telegram model defines a __unicode__ method.
|
|---|
| 1635 | For testing fix for ticket #14529.
|
|---|
| 1636 | """
|
|---|
| 1637 |
|
|---|
| 1638 | - def queryset(self, request):
|
|---|
| 1639 | - return super(TelegramAdmin, self).queryset(request).only('title')
|
|---|
| 1640 | + def get_queryset(self, request):
|
|---|
| 1641 | + return super(TelegramAdmin, self).get_queryset(request).only('title')
|
|---|
| 1642 |
|
|---|
| 1643 |
|
|---|
| 1644 | class StoryForm(forms.ModelForm):
|
|---|
| 1645 | diff --git a/tests/admin_views/customadmin.py b/tests/admin_views/customadmin.py
|
|---|
| 1646 | index d69d690..c204b81 100644
|
|---|
| 1647 | --- a/tests/admin_views/customadmin.py
|
|---|
| 1648 | +++ b/tests/admin_views/customadmin.py
|
|---|
| 1649 | @@ -35,8 +35,8 @@ class Admin2(admin.AdminSite):
|
|---|
| 1650 |
|
|---|
| 1651 | class UserLimitedAdmin(UserAdmin):
|
|---|
| 1652 | # used for testing password change on a user not in queryset
|
|---|
| 1653 | - def queryset(self, request):
|
|---|
| 1654 | - qs = super(UserLimitedAdmin, self).queryset(request)
|
|---|
| 1655 | + def get_queryset(self, request):
|
|---|
| 1656 | + qs = super(UserLimitedAdmin, self).get_queryset(request)
|
|---|
| 1657 | return qs.filter(is_superuser=False)
|
|---|
| 1658 |
|
|---|
| 1659 |
|
|---|
| 1660 | diff --git a/tests/admin_views/tests.py b/tests/admin_views/tests.py
|
|---|
| 1661 | index 0bcfc0c..3027a49 100644
|
|---|
| 1662 | --- a/tests/admin_views/tests.py
|
|---|
| 1663 | +++ b/tests/admin_views/tests.py
|
|---|
| 1664 | @@ -282,7 +282,7 @@ class AdminViewBasicTest(TestCase):
|
|---|
| 1665 | """
|
|---|
| 1666 | If no ordering is defined in `ModelAdmin.ordering` or in the query
|
|---|
| 1667 | string, then the underlying order of the queryset should not be
|
|---|
| 1668 | - changed, even if it is defined in `Modeladmin.queryset()`.
|
|---|
| 1669 | + changed, even if it is defined in `Modeladmin.get_queryset()`.
|
|---|
| 1670 | Refs #11868, #7309.
|
|---|
| 1671 | """
|
|---|
| 1672 | p1 = Person.objects.create(name="Amy", gender=1, alive=True, age=80)
|
|---|
| 1673 | @@ -2574,7 +2574,7 @@ class AdminCustomQuerysetTest(TestCase):
|
|---|
| 1674 | self.assertEqual(response.status_code, 404)
|
|---|
| 1675 |
|
|---|
| 1676 | def test_add_model_modeladmin_defer_qs(self):
|
|---|
| 1677 | - # Test for #14529. defer() is used in ModelAdmin.queryset()
|
|---|
| 1678 | + # Test for #14529. defer() is used in ModelAdmin.get_queryset()
|
|---|
| 1679 |
|
|---|
| 1680 | # model has __unicode__ method
|
|---|
| 1681 | self.assertEqual(CoverLetter.objects.count(), 0)
|
|---|
| 1682 | @@ -2613,7 +2613,7 @@ class AdminCustomQuerysetTest(TestCase):
|
|---|
| 1683 | )
|
|---|
| 1684 |
|
|---|
| 1685 | def test_add_model_modeladmin_only_qs(self):
|
|---|
| 1686 | - # Test for #14529. only() is used in ModelAdmin.queryset()
|
|---|
| 1687 | + # Test for #14529. only() is used in ModelAdmin.get_queryset()
|
|---|
| 1688 |
|
|---|
| 1689 | # model has __unicode__ method
|
|---|
| 1690 | self.assertEqual(Telegram.objects.count(), 0)
|
|---|
| 1691 | @@ -2652,7 +2652,7 @@ class AdminCustomQuerysetTest(TestCase):
|
|---|
| 1692 | )
|
|---|
| 1693 |
|
|---|
| 1694 | def test_edit_model_modeladmin_defer_qs(self):
|
|---|
| 1695 | - # Test for #14529. defer() is used in ModelAdmin.queryset()
|
|---|
| 1696 | + # Test for #14529. defer() is used in ModelAdmin.get_queryset()
|
|---|
| 1697 |
|
|---|
| 1698 | # model has __unicode__ method
|
|---|
| 1699 | cl = CoverLetter.objects.create(author="John Doe")
|
|---|
| 1700 | @@ -2699,7 +2699,7 @@ class AdminCustomQuerysetTest(TestCase):
|
|---|
| 1701 | )
|
|---|
| 1702 |
|
|---|
| 1703 | def test_edit_model_modeladmin_only_qs(self):
|
|---|
| 1704 | - # Test for #14529. only() is used in ModelAdmin.queryset()
|
|---|
| 1705 | + # Test for #14529. only() is used in ModelAdmin.get_queryset()
|
|---|
| 1706 |
|
|---|
| 1707 | # model has __unicode__ method
|
|---|
| 1708 | t = Telegram.objects.create(title="Frist Telegram")
|
|---|
| 1709 | diff --git a/tests/admin_widgets/models.py b/tests/admin_widgets/models.py
|
|---|
| 1710 | index 2977b86..ae19d58 100644
|
|---|
| 1711 | --- a/tests/admin_widgets/models.py
|
|---|
| 1712 | +++ b/tests/admin_widgets/models.py
|
|---|
| 1713 | @@ -37,8 +37,8 @@ class Album(models.Model):
|
|---|
| 1714 | return self.name
|
|---|
| 1715 |
|
|---|
| 1716 | class HiddenInventoryManager(models.Manager):
|
|---|
| 1717 | - def get_query_set(self):
|
|---|
| 1718 | - return super(HiddenInventoryManager, self).get_query_set().filter(hidden=False)
|
|---|
| 1719 | + def get_queryset(self):
|
|---|
| 1720 | + return super(HiddenInventoryManager, self).get_queryset().filter(hidden=False)
|
|---|
| 1721 |
|
|---|
| 1722 | @python_2_unicode_compatible
|
|---|
| 1723 | class Inventory(models.Model):
|
|---|
| 1724 | diff --git a/tests/custom_managers/models.py b/tests/custom_managers/models.py
|
|---|
| 1725 | index de7c177..2f5e62f 100644
|
|---|
| 1726 | --- a/tests/custom_managers/models.py
|
|---|
| 1727 | +++ b/tests/custom_managers/models.py
|
|---|
| 1728 | @@ -30,11 +30,11 @@ class Person(models.Model):
|
|---|
| 1729 | def __str__(self):
|
|---|
| 1730 | return "%s %s" % (self.first_name, self.last_name)
|
|---|
| 1731 |
|
|---|
| 1732 | -# An example of a custom manager that sets get_query_set().
|
|---|
| 1733 | +# An example of a custom manager that sets get_queryset().
|
|---|
| 1734 |
|
|---|
| 1735 | class PublishedBookManager(models.Manager):
|
|---|
| 1736 | - def get_query_set(self):
|
|---|
| 1737 | - return super(PublishedBookManager, self).get_query_set().filter(is_published=True)
|
|---|
| 1738 | + def get_queryset(self):
|
|---|
| 1739 | + return super(PublishedBookManager, self).get_queryset().filter(is_published=True)
|
|---|
| 1740 |
|
|---|
| 1741 | @python_2_unicode_compatible
|
|---|
| 1742 | class Book(models.Model):
|
|---|
| 1743 | @@ -50,8 +50,8 @@ class Book(models.Model):
|
|---|
| 1744 | # An example of providing multiple custom managers.
|
|---|
| 1745 |
|
|---|
| 1746 | class FastCarManager(models.Manager):
|
|---|
| 1747 | - def get_query_set(self):
|
|---|
| 1748 | - return super(FastCarManager, self).get_query_set().filter(top_speed__gt=150)
|
|---|
| 1749 | + def get_queryset(self):
|
|---|
| 1750 | + return super(FastCarManager, self).get_queryset().filter(top_speed__gt=150)
|
|---|
| 1751 |
|
|---|
| 1752 | @python_2_unicode_compatible
|
|---|
| 1753 | class Car(models.Model):
|
|---|
| 1754 | diff --git a/tests/custom_managers_regress/models.py b/tests/custom_managers_regress/models.py
|
|---|
| 1755 | index 71073f0..95cf6e8 100644
|
|---|
| 1756 | --- a/tests/custom_managers_regress/models.py
|
|---|
| 1757 | +++ b/tests/custom_managers_regress/models.py
|
|---|
| 1758 | @@ -10,8 +10,8 @@ class RestrictedManager(models.Manager):
|
|---|
| 1759 | """
|
|---|
| 1760 | A manager that filters out non-public instances.
|
|---|
| 1761 | """
|
|---|
| 1762 | - def get_query_set(self):
|
|---|
| 1763 | - return super(RestrictedManager, self).get_query_set().filter(is_public=True)
|
|---|
| 1764 | + def get_queryset(self):
|
|---|
| 1765 | + return super(RestrictedManager, self).get_queryset().filter(is_public=True)
|
|---|
| 1766 |
|
|---|
| 1767 | @python_2_unicode_compatible
|
|---|
| 1768 | class RelatedModel(models.Model):
|
|---|
| 1769 | diff --git a/tests/deprecation/__init__.py b/tests/deprecation/__init__.py
|
|---|
| 1770 | new file mode 100644
|
|---|
| 1771 | index 0000000..e69de29
|
|---|
| 1772 | diff --git a/tests/deprecation/models.py b/tests/deprecation/models.py
|
|---|
| 1773 | new file mode 100644
|
|---|
| 1774 | index 0000000..e69de29
|
|---|
| 1775 | diff --git a/tests/deprecation/tests.py b/tests/deprecation/tests.py
|
|---|
| 1776 | new file mode 100644
|
|---|
| 1777 | index 0000000..6317e54
|
|---|
| 1778 | --- /dev/null
|
|---|
| 1779 | +++ b/tests/deprecation/tests.py
|
|---|
| 1780 | @@ -0,0 +1,172 @@
|
|---|
| 1781 | +from __future__ import unicode_literals
|
|---|
| 1782 | +import warnings
|
|---|
| 1783 | +
|
|---|
| 1784 | +from django.test.testcases import SimpleTestCase
|
|---|
| 1785 | +from django.utils import six
|
|---|
| 1786 | +from django.utils.deprecation import RenameMethodsBase
|
|---|
| 1787 | +
|
|---|
| 1788 | +
|
|---|
| 1789 | +class RenameManagerMethods(RenameMethodsBase):
|
|---|
| 1790 | + renamed_methods = (
|
|---|
| 1791 | + ('old', 'new'),
|
|---|
| 1792 | + )
|
|---|
| 1793 | +
|
|---|
| 1794 | +
|
|---|
| 1795 | +class RenameMethodsTests(SimpleTestCase):
|
|---|
| 1796 | + """
|
|---|
| 1797 | + Tests the `RenameMethodsBase` type introduced to rename `get_query_set`
|
|---|
| 1798 | + to `get_queryset` across the code base following #15363.
|
|---|
| 1799 | + """
|
|---|
| 1800 | +
|
|---|
| 1801 | + def test_class_definition_warnings(self):
|
|---|
| 1802 | + """
|
|---|
| 1803 | + Ensure a warning is raised upon class definition to suggest renaming
|
|---|
| 1804 | + the faulty method.
|
|---|
| 1805 | + """
|
|---|
| 1806 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1807 | + warnings.simplefilter('always')
|
|---|
| 1808 | + class Manager(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1809 | + def old(self):
|
|---|
| 1810 | + pass
|
|---|
| 1811 | + self.assertEqual(len(recorded), 1)
|
|---|
| 1812 | + msg = str(recorded[0].message)
|
|---|
| 1813 | + self.assertEqual(msg,
|
|---|
| 1814 | + '`Manager.old` method should be renamed `new`.')
|
|---|
| 1815 | +
|
|---|
| 1816 | + def test_get_new_defined(self):
|
|---|
| 1817 | + """
|
|---|
| 1818 | + Ensure `old` complains and not `new` when only `new` is defined.
|
|---|
| 1819 | + """
|
|---|
| 1820 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1821 | + warnings.simplefilter('ignore')
|
|---|
| 1822 | + class Manager(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1823 | + def new(self):
|
|---|
| 1824 | + pass
|
|---|
| 1825 | + warnings.simplefilter('always')
|
|---|
| 1826 | + manager = Manager()
|
|---|
| 1827 | + manager.new()
|
|---|
| 1828 | + self.assertEqual(len(recorded), 0)
|
|---|
| 1829 | + manager.old()
|
|---|
| 1830 | + self.assertEqual(len(recorded), 1)
|
|---|
| 1831 | + msg = str(recorded.pop().message)
|
|---|
| 1832 | + self.assertEqual(msg,
|
|---|
| 1833 | + '`Manager.old` is deprecated, use `new` instead.')
|
|---|
| 1834 | +
|
|---|
| 1835 | + def test_get_old_defined(self):
|
|---|
| 1836 | + """
|
|---|
| 1837 | + Ensure `old` complains when only `old` is defined.
|
|---|
| 1838 | + """
|
|---|
| 1839 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1840 | + warnings.simplefilter('ignore')
|
|---|
| 1841 | + class Manager(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1842 | + def old(self):
|
|---|
| 1843 | + pass
|
|---|
| 1844 | + warnings.simplefilter('always')
|
|---|
| 1845 | + manager = Manager()
|
|---|
| 1846 | + manager.new()
|
|---|
| 1847 | + self.assertEqual(len(recorded), 1)
|
|---|
| 1848 | + msg = str(recorded.pop().message)
|
|---|
| 1849 | + self.assertEqual(msg,
|
|---|
| 1850 | + '`Manager.old` is deprecated, use `new` instead.')
|
|---|
| 1851 | + manager.old()
|
|---|
| 1852 | + self.assertEqual(len(recorded), 1)
|
|---|
| 1853 | + msg = str(recorded.pop().message)
|
|---|
| 1854 | + self.assertEqual(msg,
|
|---|
| 1855 | + '`Manager.old` is deprecated, use `new` instead.')
|
|---|
| 1856 | +
|
|---|
| 1857 | + def test_deprecated_subclass_renamed(self):
|
|---|
| 1858 | + """
|
|---|
| 1859 | + Ensure the correct warnings are raised when a class that didn't rename
|
|---|
| 1860 | + `old` subclass one that did.
|
|---|
| 1861 | + """
|
|---|
| 1862 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1863 | + warnings.simplefilter('ignore')
|
|---|
| 1864 | + class Renamed(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1865 | + def new(self):
|
|---|
| 1866 | + pass
|
|---|
| 1867 | + class Deprecated(Renamed):
|
|---|
| 1868 | + def old(self):
|
|---|
| 1869 | + super(Deprecated, self).old()
|
|---|
| 1870 | + warnings.simplefilter('always')
|
|---|
| 1871 | + deprecated = Deprecated()
|
|---|
| 1872 | + deprecated.new()
|
|---|
| 1873 | + self.assertEqual(len(recorded), 2)
|
|---|
| 1874 | + msgs = [str(warning.message) for warning in recorded]
|
|---|
| 1875 | + self.assertEqual(msgs, [
|
|---|
| 1876 | + '`Deprecated.old` is deprecated, use `new` instead.',
|
|---|
| 1877 | + '`Renamed.old` is deprecated, use `new` instead.',
|
|---|
| 1878 | + ])
|
|---|
| 1879 | + recorded[:] = []
|
|---|
| 1880 | + deprecated.old()
|
|---|
| 1881 | + self.assertEqual(len(recorded), 2)
|
|---|
| 1882 | + msgs = [str(warning.message) for warning in recorded]
|
|---|
| 1883 | + self.assertEqual(msgs, [
|
|---|
| 1884 | + '`Deprecated.old` is deprecated, use `new` instead.',
|
|---|
| 1885 | + '`Renamed.old` is deprecated, use `new` instead.',
|
|---|
| 1886 | + ])
|
|---|
| 1887 | +
|
|---|
| 1888 | + def test_renamed_subclass_deprecated(self):
|
|---|
| 1889 | + """
|
|---|
| 1890 | + Ensure the correct warnings are raised when a class that renamed
|
|---|
| 1891 | + `old` subclass one that didn't.
|
|---|
| 1892 | + """
|
|---|
| 1893 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1894 | + warnings.simplefilter('ignore')
|
|---|
| 1895 | + class Deprecated(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1896 | + def old(self):
|
|---|
| 1897 | + pass
|
|---|
| 1898 | + class Renamed(Deprecated):
|
|---|
| 1899 | + def new(self):
|
|---|
| 1900 | + super(Renamed, self).new()
|
|---|
| 1901 | + warnings.simplefilter('always')
|
|---|
| 1902 | + renamed = Renamed()
|
|---|
| 1903 | + renamed.new()
|
|---|
| 1904 | + self.assertEqual(len(recorded), 1)
|
|---|
| 1905 | + msg = str(recorded.pop().message)
|
|---|
| 1906 | + self.assertEqual(msg,
|
|---|
| 1907 | + '`Deprecated.old` is deprecated, use `new` instead.')
|
|---|
| 1908 | + recorded[:] = []
|
|---|
| 1909 | + renamed.old()
|
|---|
| 1910 | + self.assertEqual(len(recorded), 2)
|
|---|
| 1911 | + msgs = [str(warning.message) for warning in recorded]
|
|---|
| 1912 | + self.assertEqual(msgs, [
|
|---|
| 1913 | + '`Renamed.old` is deprecated, use `new` instead.',
|
|---|
| 1914 | + '`Deprecated.old` is deprecated, use `new` instead.',
|
|---|
| 1915 | + ])
|
|---|
| 1916 | +
|
|---|
| 1917 | + def test_deprecated_subclass_renamed_and_mixins(self):
|
|---|
| 1918 | + """
|
|---|
| 1919 | + Ensure the correct warnings are raised when a subclass inherit from a
|
|---|
| 1920 | + class that renamed `old` and mixins that may or may not have renamed
|
|---|
| 1921 | + `new`.
|
|---|
| 1922 | + """
|
|---|
| 1923 | + with warnings.catch_warnings(record=True) as recorded:
|
|---|
| 1924 | + warnings.simplefilter('ignore')
|
|---|
| 1925 | + class Renamed(six.with_metaclass(RenameManagerMethods)):
|
|---|
| 1926 | + def new(self):
|
|---|
| 1927 | + pass
|
|---|
| 1928 | + class RenamedMixin(object):
|
|---|
| 1929 | + def new(self):
|
|---|
| 1930 | + super(RenamedMixin, self).new()
|
|---|
| 1931 | + class DeprecatedMixin(object):
|
|---|
| 1932 | + def old(self):
|
|---|
| 1933 | + super(DeprecatedMixin, self).old()
|
|---|
| 1934 | + class Deprecated(DeprecatedMixin, RenamedMixin, Renamed):
|
|---|
| 1935 | + pass
|
|---|
| 1936 | + warnings.simplefilter('always')
|
|---|
| 1937 | + deprecated = Deprecated()
|
|---|
| 1938 | + deprecated.new()
|
|---|
| 1939 | + self.assertEqual(len(recorded), 2)
|
|---|
| 1940 | + msgs = [str(warning.message) for warning in recorded]
|
|---|
| 1941 | + self.assertEqual(msgs, [
|
|---|
| 1942 | + '`DeprecatedMixin.old` is deprecated, use `new` instead.',
|
|---|
| 1943 | + '`RenamedMixin.old` is deprecated, use `new` instead.',
|
|---|
| 1944 | + ])
|
|---|
| 1945 | + recorded[:] = []
|
|---|
| 1946 | + deprecated.old()
|
|---|
| 1947 | + self.assertEqual(len(recorded), 2)
|
|---|
| 1948 | + msgs = [str(warning.message) for warning in recorded]
|
|---|
| 1949 | + self.assertEqual(msgs, [
|
|---|
| 1950 | + '`DeprecatedMixin.old` is deprecated, use `new` instead.',
|
|---|
| 1951 | + '`RenamedMixin.old` is deprecated, use `new` instead.',
|
|---|
| 1952 | + ])
|
|---|
| 1953 | diff --git a/tests/fixtures/models.py b/tests/fixtures/models.py
|
|---|
| 1954 | index 8bd3501..976716f 100644
|
|---|
| 1955 | --- a/tests/fixtures/models.py
|
|---|
| 1956 | +++ b/tests/fixtures/models.py
|
|---|
| 1957 | @@ -78,8 +78,8 @@ class Person(models.Model):
|
|---|
| 1958 | return (self.name,)
|
|---|
| 1959 |
|
|---|
| 1960 | class SpyManager(PersonManager):
|
|---|
| 1961 | - def get_query_set(self):
|
|---|
| 1962 | - return super(SpyManager, self).get_query_set().filter(cover_blown=False)
|
|---|
| 1963 | + def get_queryset(self):
|
|---|
| 1964 | + return super(SpyManager, self).get_queryset().filter(cover_blown=False)
|
|---|
| 1965 |
|
|---|
| 1966 | class Spy(Person):
|
|---|
| 1967 | objects = SpyManager()
|
|---|
| 1968 | diff --git a/tests/generic_relations/models.py b/tests/generic_relations/models.py
|
|---|
| 1969 | index 18d7623..34dc8d3 100644
|
|---|
| 1970 | --- a/tests/generic_relations/models.py
|
|---|
| 1971 | +++ b/tests/generic_relations/models.py
|
|---|
| 1972 | @@ -88,8 +88,8 @@ class Mineral(models.Model):
|
|---|
| 1973 | return self.name
|
|---|
| 1974 |
|
|---|
| 1975 | class GeckoManager(models.Manager):
|
|---|
| 1976 | - def get_query_set(self):
|
|---|
| 1977 | - return super(GeckoManager, self).get_query_set().filter(has_tail=True)
|
|---|
| 1978 | + def get_queryset(self):
|
|---|
| 1979 | + return super(GeckoManager, self).get_queryset().filter(has_tail=True)
|
|---|
| 1980 |
|
|---|
| 1981 | class Gecko(models.Model):
|
|---|
| 1982 | has_tail = models.BooleanField()
|
|---|
| 1983 | diff --git a/tests/get_object_or_404/models.py b/tests/get_object_or_404/models.py
|
|---|
| 1984 | index bda0605..bb9aa60 100644
|
|---|
| 1985 | --- a/tests/get_object_or_404/models.py
|
|---|
| 1986 | +++ b/tests/get_object_or_404/models.py
|
|---|
| 1987 | @@ -22,8 +22,8 @@ class Author(models.Model):
|
|---|
| 1988 | return self.name
|
|---|
| 1989 |
|
|---|
| 1990 | class ArticleManager(models.Manager):
|
|---|
| 1991 | - def get_query_set(self):
|
|---|
| 1992 | - return super(ArticleManager, self).get_query_set().filter(authors__name__icontains='sir')
|
|---|
| 1993 | + def get_queryset(self):
|
|---|
| 1994 | + return super(ArticleManager, self).get_queryset().filter(authors__name__icontains='sir')
|
|---|
| 1995 |
|
|---|
| 1996 | @python_2_unicode_compatible
|
|---|
| 1997 | class Article(models.Model):
|
|---|
| 1998 | diff --git a/tests/managers_regress/models.py b/tests/managers_regress/models.py
|
|---|
| 1999 | index d72970d..d8dd22e 100644
|
|---|
| 2000 | --- a/tests/managers_regress/models.py
|
|---|
| 2001 | +++ b/tests/managers_regress/models.py
|
|---|
| 2002 | @@ -7,18 +7,18 @@ from django.utils.encoding import python_2_unicode_compatible
|
|---|
| 2003 |
|
|---|
| 2004 |
|
|---|
| 2005 | class OnlyFred(models.Manager):
|
|---|
| 2006 | - def get_query_set(self):
|
|---|
| 2007 | - return super(OnlyFred, self).get_query_set().filter(name='fred')
|
|---|
| 2008 | + def get_queryset(self):
|
|---|
| 2009 | + return super(OnlyFred, self).get_queryset().filter(name='fred')
|
|---|
| 2010 |
|
|---|
| 2011 |
|
|---|
| 2012 | class OnlyBarney(models.Manager):
|
|---|
| 2013 | - def get_query_set(self):
|
|---|
| 2014 | - return super(OnlyBarney, self).get_query_set().filter(name='barney')
|
|---|
| 2015 | + def get_queryset(self):
|
|---|
| 2016 | + return super(OnlyBarney, self).get_queryset().filter(name='barney')
|
|---|
| 2017 |
|
|---|
| 2018 |
|
|---|
| 2019 | class Value42(models.Manager):
|
|---|
| 2020 | - def get_query_set(self):
|
|---|
| 2021 | - return super(Value42, self).get_query_set().filter(value=42)
|
|---|
| 2022 | + def get_queryset(self):
|
|---|
| 2023 | + return super(Value42, self).get_queryset().filter(value=42)
|
|---|
| 2024 |
|
|---|
| 2025 |
|
|---|
| 2026 | class AbstractBase1(models.Model):
|
|---|
| 2027 | diff --git a/tests/modeladmin/tests.py b/tests/modeladmin/tests.py
|
|---|
| 2028 | index b0a1812..2f3eddd 100644
|
|---|
| 2029 | --- a/tests/modeladmin/tests.py
|
|---|
| 2030 | +++ b/tests/modeladmin/tests.py
|
|---|
| 2031 | @@ -1074,7 +1074,7 @@ class ValidationTests(unittest.TestCase):
|
|---|
| 2032 | return 'awesomeness'
|
|---|
| 2033 | def get_choices(self, request):
|
|---|
| 2034 | return (('bit', 'A bit awesome'), ('very', 'Very awesome'), )
|
|---|
| 2035 | - def get_query_set(self, cl, qs):
|
|---|
| 2036 | + def get_queryset(self, cl, qs):
|
|---|
| 2037 | return qs
|
|---|
| 2038 |
|
|---|
| 2039 | class ValidationTestModelAdmin(ModelAdmin):
|
|---|
| 2040 | diff --git a/tests/prefetch_related/models.py b/tests/prefetch_related/models.py
|
|---|
| 2041 | index e58997d..81c5698 100644
|
|---|
| 2042 | --- a/tests/prefetch_related/models.py
|
|---|
| 2043 | +++ b/tests/prefetch_related/models.py
|
|---|
| 2044 | @@ -87,8 +87,8 @@ class Qualification(models.Model):
|
|---|
| 2045 |
|
|---|
| 2046 |
|
|---|
| 2047 | class TeacherManager(models.Manager):
|
|---|
| 2048 | - def get_query_set(self):
|
|---|
| 2049 | - return super(TeacherManager, self).get_query_set().prefetch_related('qualifications')
|
|---|
| 2050 | + def get_queryset(self):
|
|---|
| 2051 | + return super(TeacherManager, self).get_queryset().prefetch_related('qualifications')
|
|---|
| 2052 |
|
|---|
| 2053 |
|
|---|
| 2054 | @python_2_unicode_compatible
|
|---|
| 2055 | diff --git a/tests/proxy_models/models.py b/tests/proxy_models/models.py
|
|---|
| 2056 | index 6c962aa..ffb3665 100644
|
|---|
| 2057 | --- a/tests/proxy_models/models.py
|
|---|
| 2058 | +++ b/tests/proxy_models/models.py
|
|---|
| 2059 | @@ -10,12 +10,12 @@ from django.utils.encoding import python_2_unicode_compatible
|
|---|
| 2060 | # A couple of managers for testing managing overriding in proxy model cases.
|
|---|
| 2061 |
|
|---|
| 2062 | class PersonManager(models.Manager):
|
|---|
| 2063 | - def get_query_set(self):
|
|---|
| 2064 | - return super(PersonManager, self).get_query_set().exclude(name="fred")
|
|---|
| 2065 | + def get_queryset(self):
|
|---|
| 2066 | + return super(PersonManager, self).get_queryset().exclude(name="fred")
|
|---|
| 2067 |
|
|---|
| 2068 | class SubManager(models.Manager):
|
|---|
| 2069 | - def get_query_set(self):
|
|---|
| 2070 | - return super(SubManager, self).get_query_set().exclude(name="wilma")
|
|---|
| 2071 | + def get_queryset(self):
|
|---|
| 2072 | + return super(SubManager, self).get_queryset().exclude(name="wilma")
|
|---|
| 2073 |
|
|---|
| 2074 | @python_2_unicode_compatible
|
|---|
| 2075 | class Person(models.Model):
|
|---|
| 2076 | diff --git a/tests/queries/models.py b/tests/queries/models.py
|
|---|
| 2077 | index 28c8585..c025308 100644
|
|---|
| 2078 | --- a/tests/queries/models.py
|
|---|
| 2079 | +++ b/tests/queries/models.py
|
|---|
| 2080 | @@ -176,8 +176,8 @@ class LoopZ(models.Model):
|
|---|
| 2081 |
|
|---|
| 2082 | # A model and custom default manager combination.
|
|---|
| 2083 | class CustomManager(models.Manager):
|
|---|
| 2084 | - def get_query_set(self):
|
|---|
| 2085 | - qs = super(CustomManager, self).get_query_set()
|
|---|
| 2086 | + def get_queryset(self):
|
|---|
| 2087 | + qs = super(CustomManager, self).get_queryset()
|
|---|
| 2088 | return qs.filter(public=True, tag__name='t1')
|
|---|
| 2089 |
|
|---|
| 2090 | @python_2_unicode_compatible
|
|---|
| 2091 | @@ -197,8 +197,8 @@ class Detail(models.Model):
|
|---|
| 2092 | data = models.CharField(max_length=10)
|
|---|
| 2093 |
|
|---|
| 2094 | class MemberManager(models.Manager):
|
|---|
| 2095 | - def get_query_set(self):
|
|---|
| 2096 | - return super(MemberManager, self).get_query_set().select_related("details")
|
|---|
| 2097 | + def get_queryset(self):
|
|---|
| 2098 | + return super(MemberManager, self).get_queryset().select_related("details")
|
|---|
| 2099 |
|
|---|
| 2100 | class Member(models.Model):
|
|---|
| 2101 | name = models.CharField(max_length=10)
|
|---|
| 2102 | diff --git a/tests/reverse_single_related/models.py b/tests/reverse_single_related/models.py
|
|---|
| 2103 | index 898be84..30ba345 100644
|
|---|
| 2104 | --- a/tests/reverse_single_related/models.py
|
|---|
| 2105 | +++ b/tests/reverse_single_related/models.py
|
|---|
| 2106 | @@ -2,8 +2,8 @@ from django.db import models
|
|---|
| 2107 |
|
|---|
| 2108 |
|
|---|
| 2109 | class SourceManager(models.Manager):
|
|---|
| 2110 | - def get_query_set(self):
|
|---|
| 2111 | - return super(SourceManager, self).get_query_set().filter(is_public=True)
|
|---|
| 2112 | + def get_queryset(self):
|
|---|
| 2113 | + return super(SourceManager, self).get_queryset().filter(is_public=True)
|
|---|
| 2114 |
|
|---|
| 2115 | class Source(models.Model):
|
|---|
| 2116 | is_public = models.BooleanField()
|
|---|