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',)
}),
)