6

次の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」に対して行ったのと同じ方法で行うことはできませんが、他の解決策はありますか?

ありがとう!

4

0 に答える 0