あなたは管理クラスの「注文」属性を探していると思います。
http://docs.djangoproject.com/en/1.3/ref/contrib/admin/
編集:私の前の答えは間違っています。上記のドキュメントによると、Djangoはタプルの最初のエントリのみを尊重します。これを解決するにはa ticketがありましたが、どこにも行きませんでした。他にも様々な提案された解決策がありましたが、私のバージョンのDjangoで動作するようには思われませんでした。
しかし、今日私はプロジェクトの一環としてこの問題に戻り、最終的に私のために働くものを見つけました。私の解決策はthis Django snippetに基づいていました。完全版のためにここにスニペットコードを掲載します。
from django.contrib import admin
from django.contrib.admin.views.main import ChangeList
from tunes.models import Song
class SpecialOrderingChangeList(ChangeList):
def apply_special_ordering(self, queryset):
order_type, order_by = [self.params.get(param, None) for param in ('ot', 'o')]
special_ordering = self.model_admin.special_ordering
if special_ordering and order_type and order_by:
try:
order_field = self.list_display[int(order_by)]
ordering = special_ordering[order_field]
if order_type == 'desc':
ordering = ['-' + field for field in ordering]
queryset = queryset.order_by(*ordering)
except IndexError:
return queryset
except KeyError:
return queryset
return queryset
def get_query_set(self):
queryset = super(SpecialOrderingChangeList, self).get_query_set()
queryset = self.apply_special_ordering(queryset)
return queryset
class SongAdmin(admin.ModelAdmin):
list_display = ['name', 'time', 'artist', 'album', 'track', 'total_tracks']
special_ordering = {'artist': ('artist', 'album', 'track'), 'album': ('album', 'track')}
def get_changelist(self, request, **kwargs):
return SpecialOrderingChangeList
admin.site.register(Song, SongAdmin)
いいえ。 Djangoのドキュメントでは、「Djangoはリスト/タプルの最初の要素のみを尊重し、他の要素は無視されます。 – Jonathan
よく目に付きます。面白いですが、タプルであるため、すべての列によって順序付けされていたと仮定して、このたくさんの時間を使いました。私はそれがなかったことに気付かなかったと思う!その場合は、モデルのModelAdminのqueryset()メソッドをオーバーライドしてソート順を変更する必要があると思います。 – bogeymin
私もそれを試して、それは助けになりませんでした。この方向で成功した場合は、コードを投稿してください。 – Jonathan