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”也一样。作为一种解决方法,我可以忽略它,只需单击标题,但它困扰我为什么,如果它通过单击默认顺序无法设置,当字段明显存在时?有什么想法吗?

问题的第二部分是是否可以在过滤字段“total_active_videos”上添加排序。据我了解,不可能用条件进行注释,因此不能像对“total_videos”那样做,但还有其他解决方案吗?

谢谢!

4

0 回答 0