次のdjango管理者の例外があります:
class TagAdmin(admin.ModelAdmin):
prepopulated_fields = {"slug": ("title",)}
list_display = ['title', 'total_videos', 'total_active_videos', 'weight', 'status']
search_fields = ['title']
list_filter = ['status']
ordering = ['-weight']
def queryset(self, request):
return Tag.objects.annotate(total_videos_order=Count('video'))
def total_videos(self, obj):
return obj.total_videos_order
total_videos.admin_order_field = 'total_videos_order'
def total_active_videos(self, obj):
return u'%s' % Video.objects.filter(tags=obj, status=Video.STATUS_ACTIVE).count()
これですべて正常に動作し、total_videos と total_active_videos の両方が正しい情報を表示しています。また、テーブル ヘッダーをクリックすると、total_videos を並べ替えることができます。ただし、コードを次のように変更しようとすると:
ordering = ['total_videos_order']
エラーが表示されます:
TagAdmin.ordering[0]' は、モデル 'videos.Tag' にないフィールド 'total_videos_order' を参照しています。
「total_videos」だけの場合も同じです。回避策として、それを無視してヘッダーをクリックするだけですが、フィールドが明らかに存在するのに、デフォルトの順序をクリックして順序を設定できない場合、なぜ気になりますか? それに関するアイデアはありますか?
質問の 2 番目の部分は、フィルタリングされたフィールド「total_active_videos」に並べ替えを追加できるかどうかです。私が理解していることから、条件で注釈を付けることができないため、「total_videos」に対して行ったのと同じ方法で行うことはできませんが、他の解決策はありますか?
ありがとう!