Django админ по умолчанию порядок пользовательских полей

У меня есть следующее админка 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] 'ссылается на поле total_videos_order, которое отсутствует в модели videos.Tag.

То же самое, если это просто "total_videos". В качестве обходного пути я могу проигнорировать это и просто щелкнуть по заголовку, но это беспокоит меня, почему, если его порядок не может быть установлен, щелкнув по умолчанию, когда поле, очевидно, существует? Есть идеи по этому поводу?

Вторая часть вопроса - возможно ли добавить сортировку по отфильтрованному полю "total_active_videos". Из того, что я понимаю, это невозможно аннотировать с условиями, поэтому это не может быть сделано так же, как это сделано для "total_videos", но есть ли другие решения?

Спасибо!

0 ответов

Другие вопросы по тегам