Opened 9 years ago
Last modified 7 years ago
#25790 closed New feature
Admin magic change list UI ordering is too helpful? — at Initial Version
Reported by: | Ramiro Morales | Owned by: | nobody |
---|---|---|---|
Component: | contrib.admin | Version: | dev |
Severity: | Normal | Keywords: | sorting ordering change list changelist admin |
Cc: | Simon Charette, Matthijs Kooijman | Triage Stage: | Ready for checkin |
Has patch: | yes | Needs documentation: | no |
Needs tests: | no | Patch needs improvement: | no |
Easy pickings: | no | UI/UX: | no |
Description
Consider this model:
# models.py from __future__ import unicode_literals from django.db import models class CreditCard(models.Model): issued_to = models.CharField(max_length=40) valid_to = models.DateField() last_four_digits = models.CharField(max_length=4)
And this admin.py for the app:
from django.contrib import admin from app.models import CreditCard class CCAdmin(admin.ModelAdmin): list_display = [ 'issued_to', 'valid_to', 'last_four_digits', ] ordering = ['valid_to'] def last4digits(self, obj): """So we don't get bogus ordering by this field in the change list view.""" return obj.last_four_digits last4digits.short_description = '4 last digits' admin.site.register(CreditCard, CCAdmin)
The user has specified explicitly he/she wants the change list view grid to be sortable by default by the credt card expiration date by using the ModelAdmin.ordering
option.
Now, the interactive sorting changelist functionality that allows one to sort by a column by clicking on its header automagically allows one to also sort by other columns chosen by a documented logic (i.e. not if callable columns, etc.).
In the example, it allows users to also sort by the name of the credit card owner which, even if not asked for, seems useful.
Where it doesn't make so much sense is, for the example, in the case of the 'last four digits' column. IMHO there should be a way to express which columns one wants this functionality without having to resort to things like
class CCAdmin(admin.ModelAdmin): list_display = [ 'issued_to', 'valid_to', 'last4digits', ] #... def last4digits(self, obj): """So we don't get bogus ordering by this field in the change list view.""" return obj.last_four_digits last4digits.short_description = '4 last digits'