diff --git a/django/contrib/admin/filters.py b/django/contrib/admin/filters.py index d65e01d5e2feb..88180b6265fb0 100644 --- a/django/contrib/admin/filters.py +++ b/django/contrib/admin/filters.py @@ -193,11 +193,19 @@ def has_output(self): def expected_parameters(self): return [self.lookup_kwarg, self.lookup_kwarg_isnull] - def field_choices(self, field, request, model_admin): + def get_field_ordering(self, field, request, model_admin): + """ + Return the list of ordering fields for related field, + if related model admin has `ordering`. + """ ordering = () related_admin = model_admin.admin_site._registry.get(field.remote_field.model) if related_admin is not None: ordering = related_admin.get_ordering(request) + return ordering + + def field_choices(self, field, request, model_admin): + ordering = self.get_field_ordering(field, request, model_admin) return field.get_choices(include_blank=False, ordering=ordering) def choices(self, changelist): @@ -419,4 +427,5 @@ def choices(self, changelist): class RelatedOnlyFieldListFilter(RelatedFieldListFilter): def field_choices(self, field, request, model_admin): pk_qs = model_admin.get_queryset(request).distinct().values_list('%s__pk' % self.field_path, flat=True) - return field.get_choices(include_blank=False, limit_choices_to={'pk__in': pk_qs}) + ordering = self.get_field_ordering(field, request, model_admin) + return field.get_choices(include_blank=False, limit_choices_to={'pk__in': pk_qs}, ordering=ordering)