Loading AUTHORS +1 −1 Original line number Diff line number Diff line Loading @@ -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> Loading django/contrib/admin/options.py +19 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = () Loading Loading @@ -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: Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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)), Loading Loading @@ -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) Loading @@ -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), Loading Loading @@ -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: Loading @@ -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: Loading Loading @@ -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 Loading django/contrib/admin/templatetags/admin_list.py +5 −5 Original line number Diff line number Diff line Loading @@ -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: Loading @@ -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, Loading @@ -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, Loading @@ -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': [{ Loading django/contrib/admin/views/main.py +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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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') Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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: Loading django/contrib/auth/admin.py +1 −1 Original line number Diff line number Diff line Loading @@ -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 Loading
AUTHORS +1 −1 Original line number Diff line number Diff line Loading @@ -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> Loading
django/contrib/admin/options.py +19 −12 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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 = () Loading Loading @@ -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: Loading Loading @@ -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) Loading Loading @@ -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) Loading @@ -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)), Loading Loading @@ -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) Loading @@ -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), Loading Loading @@ -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: Loading @@ -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: Loading Loading @@ -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 Loading
django/contrib/admin/templatetags/admin_list.py +5 −5 Original line number Diff line number Diff line Loading @@ -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: Loading @@ -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, Loading @@ -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, Loading @@ -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': [{ Loading
django/contrib/admin/views/main.py +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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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') Loading @@ -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 Loading Loading @@ -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 Loading @@ -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 Loading @@ -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 Loading Loading @@ -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: Loading
django/contrib/auth/admin.py +1 −1 Original line number Diff line number Diff line Loading @@ -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