from django.contrib import admin from django.utils.translation import gettext_lazy as _ from django.urls import reverse from django.utils.html import format_html from ajaxdatatable.admin import AjaxDatatable from apps.video.models import * class VideoInCollectionInline(admin.TabularInline): model = VideoInCollection extra = 1 autocomplete_fields = ('video',) ordering = ('priority',) class VideoCollectionAdminBase(AjaxDatatable): """Base admin class for all video collection types""" list_display = ('title', 'status', 'order', 'count_videos', 'created_at') list_filter = ('status', 'created_at', 'updated_at') search_fields = ('title',) inlines = [VideoInCollectionInline] fieldsets = ( (None, { 'fields': ('title', 'status', 'order') }), ) @admin.display(description=_('Number of Videos')) def count_videos(self, obj): count = obj.videos.count() if count > 0: url = reverse('admin:video_video_changelist') + f'?collections__id__exact={obj.id}' return format_html('{}', url, count) return count # @admin.register(VideoCollection) # class VideoCollectionAdmin(VideoCollectionAdminBase): # """Admin for all video collections""" # list_display = ('title', 'status', 'count_videos', 'created_at') # list_filter = ('status', 'created_at', 'updated_at') @admin.register(VideoCategory) class VideoCategoryAdmin(AjaxDatatable): list_display = ('title', 'slug', 'status', 'order', 'count_videos', 'created_at') list_filter = ('status', 'created_at', 'updated_at') search_fields = ('title', 'slug') @admin.display(description=_('Number of Videos')) def count_videos(self, obj): count = obj.videos.count() if count > 0: url = reverse('admin:video_video_changelist') + f'?category__id__exact={obj.id}' return format_html('{}', url, count) return count @admin.register(Video) class VideoAdmin(AjaxDatatable): list_display = ('title', 'slug', 'video_type', 'status', 'view_count', 'created_at') list_filter = ('status', 'video_type', 'created_at', 'updated_at') search_fields = ('title', 'slug', 'description') autocomplete_fields = ('categories',) fieldsets = ( (None, { 'fields': ('title', 'slug', 'description', 'thumbnail', 'categories') }), (_('Video Information'), { 'fields': ('video_type', 'video_file', 'video_url', 'video_time') }), (_('Status'), { 'fields': ('status',) }), (_('Statistics'), { 'fields': ('view_count',) }), )