4

したがって、クエリセットの追加フィールドを使用して、選択したクエリに列を追加できます。これをデフォルトの順序として設定できます。私はこれまでこれを達成することができました:追加のフィールドを作成し、それをデフォルトの順序として設定しました。

qs = qs.extra(select={'natname':"concat('0', nat, name)"}, order_by=['natname'])

これで、管理インターフェースに他のフィールドが{name, nat, location, space, ....}あり、テーブルの結果natnameはページが読み込まれたときに並べ替えられます...完璧です。

しかし、今はnameフィールドでの注文を有効にしたいのですが、で注文するのではなく、で注文しnameたいと思いnatnameます。これは可能ですか?

したがって、余分なフィールドですが、順序付けに関しては、どういうわけか列をnatnameバインドしたいと思います。namenatname

今のところ、そうすると、。qs.query.__str__()を使用してSQLクエリを取得しますorder by natname。列をクリックするとname、順序がに変わりますがname、この特別な場合のために、で順序付けてnatnameください。これは可能ですか?

Djangoがこれらの自動管理ページのヘッダーとビューをどのように生成するかを見てきましたが、このモデルので定義され<django-installation-path>/contrib/adminたセットのみを参照しています。そこで変更を加えると、管理ビューで表示される列が変更されます。list_displayModelAdmin

少し紛らわしいように聞こえるかもしれません。特に詳しい情報が必要な場合は、お気軽にお問い合わせください。

ありがとう。

4

1 に答える 1

6

はい!これは可能です(少なくともDjango 1.2.3では):

admin.ModelAdminサブクラス:

from django.contrib import admin

from .models import ClassA

class ModelAdminA(admin.ModelAdmin):
    list_display = ('natname',)

    def natname(self, obj):
        return obj.name
    natname.admin_order_field = 'natname'
    natname.short_description = 'name'

    def queryset(self, request):
        qs = super(ModelAdminA, self).queryset(request)
        qs = qs.extra(select={ 'natname': "concat('0', nat, name)" })
        return qs

admin.site.register(ClassA, ModelAdminA)
于 2011-02-03T20:48:01.393 に答える