You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
85 lines
2.7 KiB
85 lines
2.7 KiB
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('<a href="{}">{}</a>', 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('<a href="{}">{}</a>', 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',)
|
|
}),
|
|
)
|
|
|