Commit 6983a1a5 authored by Loic Bistuer's avatar Loic Bistuer Committed by Simon Charette
Browse files

Fixed #15363 -- Renamed and normalized to `get_queryset` the methods that return a QuerySet.

parent 477d737e
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -98,7 +98,7 @@ answer newbie questions, and generally made Django that much better:
    Natalia Bidart <nataliabidart@gmail.com>
    Mark Biggers <biggers@utsl.com>
    Paul Bissex <http://e-scribe.com/>
    Loic Bistuer <loic.bistuer@sixmedia.com>
    Loïc Bistuer <loic.bistuer@sixmedia.com>
    Simon Blanchard
    Craig Blaszczyk <masterjakul@gmail.com>
    David Blewett <david@dawninglight.net>
+19 −12
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ from django.utils.datastructures import SortedDict
from django.utils.html import escape, escapejs
from django.utils.safestring import mark_safe
from django.utils import six
from django.utils.deprecation import RenameMethodsBase
from django.utils.text import capfirst, get_text_list
from django.utils.translation import ugettext as _
from django.utils.translation import ungettext
@@ -64,7 +65,13 @@ FORMFIELD_FOR_DBFIELD_DEFAULTS = {
csrf_protect_m = method_decorator(csrf_protect)


class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
class RenameBaseModelAdminMethods(forms.MediaDefiningClass, RenameMethodsBase):
    renamed_methods = (
        ('queryset', 'get_queryset', PendingDeprecationWarning),
    )


class BaseModelAdmin(six.with_metaclass(RenameBaseModelAdminMethods)):
    """Functionality common to both ModelAdmin and InlineAdmin."""

    raw_id_fields = ()
@@ -239,12 +246,12 @@ class BaseModelAdmin(six.with_metaclass(forms.MediaDefiningClass)):
        """
        return self.prepopulated_fields

    def queryset(self, request):
    def get_queryset(self, request):
        """
        Returns a QuerySet of all model instances that can be edited by the
        admin site. This is used by changelist_view.
        """
        qs = self.model._default_manager.get_query_set()
        qs = self.model._default_manager.get_queryset()
        # TODO: this should be handled by some parameter to the ChangeList.
        ordering = self.get_ordering(request)
        if ordering:
@@ -496,7 +503,7 @@ class ModelAdmin(BaseModelAdmin):
        returned if no match is found (or the object_id failed validation
        against the primary key field).
        """
        queryset = self.queryset(request)
        queryset = self.get_queryset(request)
        model = queryset.model
        try:
            object_id = model._meta.pk.to_python(object_id)
@@ -1008,7 +1015,7 @@ class ModelAdmin(BaseModelAdmin):
                formset = FormSet(data=request.POST, files=request.FILES,
                                  instance=new_object,
                                  save_as_new="_saveasnew" in request.POST,
                                  prefix=prefix, queryset=inline.queryset(request))
                                  prefix=prefix, queryset=inline.get_queryset(request))
                formsets.append(formset)
            if all_valid(formsets) and form_validated:
                self.save_model(request, new_object, form, False)
@@ -1034,7 +1041,7 @@ class ModelAdmin(BaseModelAdmin):
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(instance=self.model(), prefix=prefix,
                                  queryset=inline.queryset(request))
                                  queryset=inline.get_queryset(request))
                formsets.append(formset)

        adminForm = helpers.AdminForm(form, list(self.get_fieldsets(request)),
@@ -1104,7 +1111,7 @@ class ModelAdmin(BaseModelAdmin):
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(request.POST, request.FILES,
                                  instance=new_object, prefix=prefix,
                                  queryset=inline.queryset(request))
                                  queryset=inline.get_queryset(request))

                formsets.append(formset)

@@ -1124,7 +1131,7 @@ class ModelAdmin(BaseModelAdmin):
                if prefixes[prefix] != 1 or not prefix:
                    prefix = "%s-%s" % (prefix, prefixes[prefix])
                formset = FormSet(instance=obj, prefix=prefix,
                                  queryset=inline.queryset(request))
                                  queryset=inline.get_queryset(request))
                formsets.append(formset)

        adminForm = helpers.AdminForm(form, self.get_fieldsets(request, obj),
@@ -1209,7 +1216,7 @@ class ModelAdmin(BaseModelAdmin):
        if (actions and request.method == 'POST' and
                'index' in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(request, queryset=cl.get_query_set(request))
                response = self.response_action(request, queryset=cl.get_queryset(request))
                if response:
                    return response
                else:
@@ -1225,7 +1232,7 @@ class ModelAdmin(BaseModelAdmin):
                helpers.ACTION_CHECKBOX_NAME in request.POST and
                'index' not in request.POST and '_save' not in request.POST):
            if selected:
                response = self.response_action(request, queryset=cl.get_query_set(request))
                response = self.response_action(request, queryset=cl.get_queryset(request))
                if response:
                    return response
                else:
@@ -1521,8 +1528,8 @@ class InlineModelAdmin(BaseModelAdmin):
        fields = list(form.base_fields) + list(self.get_readonly_fields(request, obj))
        return [(None, {'fields': fields})]

    def queryset(self, request):
        queryset = super(InlineModelAdmin, self).queryset(request)
    def get_queryset(self, request):
        queryset = super(InlineModelAdmin, self).get_queryset(request)
        if not self.has_change_permission(request):
            queryset = queryset.none()
        return queryset
+5 −5
Original line number Diff line number Diff line
@@ -306,7 +306,7 @@ def date_hierarchy(cl):

        if not (year_lookup or month_lookup or day_lookup):
            # select appropriate start level
            date_range = cl.query_set.aggregate(first=models.Min(field_name),
            date_range = cl.queryset.aggregate(first=models.Min(field_name),
                                               last=models.Max(field_name))
            if date_range['first'] and date_range['last']:
                if date_range['first'].year == date_range['last'].year:
@@ -325,7 +325,7 @@ def date_hierarchy(cl):
                'choices': [{'title': capfirst(formats.date_format(day, 'MONTH_DAY_FORMAT'))}]
            }
        elif year_lookup and month_lookup:
            days = cl.query_set.filter(**{year_field: year_lookup, month_field: month_lookup})
            days = cl.queryset.filter(**{year_field: year_lookup, month_field: month_lookup})
            days = getattr(days, dates_or_datetimes)(field_name, 'day')
            return {
                'show': True,
@@ -339,7 +339,7 @@ def date_hierarchy(cl):
                } for day in days]
            }
        elif year_lookup:
            months = cl.query_set.filter(**{year_field: year_lookup})
            months = cl.queryset.filter(**{year_field: year_lookup})
            months = getattr(months, dates_or_datetimes)(field_name, 'month')
            return {
                'show': True,
@@ -353,7 +353,7 @@ def date_hierarchy(cl):
                } for month in months]
            }
        else:
            years = getattr(cl.query_set, dates_or_datetimes)(field_name, 'year')
            years = getattr(cl.queryset, dates_or_datetimes)(field_name, 'year')
            return {
                'show': True,
                'choices': [{
+31 −8
Original line number Diff line number Diff line
import operator
import warnings
from functools import reduce

from django.core.exceptions import SuspiciousOperation, ImproperlyConfigured
@@ -6,7 +7,9 @@ from django.core.paginator import InvalidPage
from django.core.urlresolvers import reverse
from django.db import models
from django.db.models.fields import FieldDoesNotExist
from django.utils import six
from django.utils.datastructures import SortedDict
from django.utils.deprecation import RenameMethodsBase
from django.utils.encoding import force_str, force_text
from django.utils.translation import ugettext, ugettext_lazy
from django.utils.http import urlencode
@@ -33,14 +36,20 @@ IGNORED_PARAMS = (
EMPTY_CHANGELIST_VALUE = ugettext_lazy('(None)')


class ChangeList(object):
class RenameChangeListMethods(RenameMethodsBase):
    renamed_methods = (
        ('get_query_set', 'get_queryset', PendingDeprecationWarning),
    )


class ChangeList(six.with_metaclass(RenameChangeListMethods)):
    def __init__(self, request, model, list_display, list_display_links,
            list_filter, date_hierarchy, search_fields, list_select_related,
            list_per_page, list_max_show_all, list_editable, model_admin):
        self.model = model
        self.opts = model._meta
        self.lookup_opts = self.opts
        self.root_query_set = model_admin.queryset(request)
        self.root_queryset = model_admin.get_queryset(request)
        self.list_display = list_display
        self.list_display_links = list_display_links
        self.list_filter = list_filter
@@ -70,7 +79,7 @@ class ChangeList(object):
        else:
            self.list_editable = list_editable
        self.query = request.GET.get(SEARCH_VAR, '')
        self.query_set = self.get_query_set(request)
        self.queryset = self.get_queryset(request)
        self.get_results(request)
        if self.is_popup:
            title = ugettext('Select %s')
@@ -79,6 +88,20 @@ class ChangeList(object):
        self.title = title % force_text(self.opts.verbose_name)
        self.pk_attname = self.lookup_opts.pk.attname

    @property
    def root_query_set(self):
        warnings.warn("`ChangeList.root_query_set` is deprecated, "
                      "use `root_queryset` instead.",
                      PendingDeprecationWarning, 2)
        return self.root_queryset

    @property
    def query_set(self):
        warnings.warn("`ChangeList.query_set` is deprecated, "
                      "use `queryset` instead.",
                      PendingDeprecationWarning, 2)
        return self.queryset

    def get_filters_params(self, params=None):
        """
        Returns all params except IGNORED_PARAMS
@@ -169,7 +192,7 @@ class ChangeList(object):
        return '?%s' % urlencode(sorted(p.items()))

    def get_results(self, request):
        paginator = self.model_admin.get_paginator(request, self.query_set, self.list_per_page)
        paginator = self.model_admin.get_paginator(request, self.queryset, self.list_per_page)
        # Get the number of objects, with admin filters applied.
        result_count = paginator.count

@@ -178,7 +201,7 @@ class ChangeList(object):
        # full_result_count is equal to paginator.count if no filters
        # were applied
        if self.get_filters_params():
            full_result_count = self.root_query_set.count()
            full_result_count = self.root_queryset.count()
        else:
            full_result_count = result_count
        can_show_all = result_count <= self.list_max_show_all
@@ -186,7 +209,7 @@ class ChangeList(object):

        # Get the list of objects to display on this page.
        if (self.show_all and can_show_all) or not multi_page:
            result_list = self.query_set._clone()
            result_list = self.queryset._clone()
        else:
            try:
                result_list = paginator.page(self.page_num+1).object_list
@@ -304,13 +327,13 @@ class ChangeList(object):
                ordering_fields[idx] = 'desc' if pfx == '-' else 'asc'
        return ordering_fields

    def get_query_set(self, request):
    def get_queryset(self, request):
        # First, we collect all the declared list filters.
        (self.filter_specs, self.has_filters, remaining_lookup_params,
         use_distinct) = self.get_filters(request)

        # Then, we let every list filter modify the queryset to its liking.
        qs = self.root_query_set
        qs = self.root_queryset
        for filter_spec in self.filter_specs:
            new_qs = filter_spec.queryset(request, qs)
            if new_qs is not None:
+1 −1
Original line number Diff line number Diff line
@@ -118,7 +118,7 @@ class UserAdmin(admin.ModelAdmin):
    def user_change_password(self, request, id, form_url=''):
        if not self.has_change_permission(request):
            raise PermissionDenied
        user = get_object_or_404(self.queryset(request), pk=id)
        user = get_object_or_404(self.get_queryset(request), pk=id)
        if request.method == 'POST':
            form = self.change_password_form(user, request.POST)
            if form.is_valid():
Loading