2013-05-15 13 views
16

enter image description hereDjangoの管理 -

list_filterソート私はlist_filterで「バージョン」を持っている、と私は、最新バージョンの「すべて」リスト項目の後になりたいです。 この場合、降順でソートするにはどうすればよいですか?何とかそれはあなたの目的を満たしていない場合は、独自のカスタムリストフィルタを書くことができます

class MyModel(models.Model): 
    # some model fields here 
    class Meta: 
     ordering = ['-version',] 

:(すべて、3.6.99.108,3.6.99.107 ...)

+0

可能な重複:http://stackoverflow.com/questions/3258314/how-to-sort-list-filter-labels-for-foreign-key-filters-in-django-admin – tuxcanfly

+0

@tuxcanfly真しかし、このOPはより良い答えを保持します –

答えて

23

はモデルでMetaクラスをデフォルトの順序を定義します。

次のエラー AttributeError: object has no attribute 'queryset'を取得する場合、あなたはおそらく、例えば代わり​​に Django 1.5+使用 .get_queryset()を使用している
from django.utils.translation import ugettext_lazy as _ 
from django.contrib.admin import SimpleListFilter 

class VersionFilter(SimpleListFilter): 
    title = _('version') 

    parameter_name = 'version' 

    def lookups(self, request, model_admin): 
     qs = model_admin.queryset(request) 
     return [(i, i) for i in qs.values_list('version', flat=True) \ 
            .distinct().order_by('-version')] 

    def queryset(self, request, queryset): 
     if self.value(): 
      return queryset.filter(version__exact=self.value()) 

class MyModel(ModelAdmin): 
    list_filter = (VersionFilter,) 

qs = model_admin.get_queryset(request) 
+0

これはあなた自身の[フィルタ](https://docs.djangoproject.com/en/dev/ref/contrib/admin/#django.contrib.admin.ModelAdmin.list_filter)を作成します希望しないデフォルトの注文動作 –

+0

@Heddeええ私はそのための例を追加しました。私はあなたのコメントをカスタムフィルタの例を追加した後に見ました。ありがとう! –

+0

@Aamir Adnan、model_adminには 'get_queryset'メソッドがありません(' qs = model_admin.get_queryset(request) ')。それは 'queryset'メソッドを持っています。おそらく答えを変える必要があるでしょう。 – stalk