Browse Source

feat(podcast, video): implement category creation and playlist association for podcasts and videos

- Added management commands to create podcast and video categories in Russian, ensuring a structured categorization system.
- Updated podcast and video playlist creation commands to associate playlists with the newly created categories.
- Enhanced documentation to reflect the new category creation process and its integration into the podcast and video systems.
master
mortezaei 6 months ago
parent
commit
c7d46c9833
  1. 57
      PODCAST_SETUP_GUIDE.md
  2. 26
      VIDEO_REFACTORING_SUMMARY.md
  3. 88
      apps/podcast/management/commands/create_podcast_categories.py
  4. 40
      apps/podcast/management/commands/create_podcast_playlists.py
  5. 88
      apps/video/management/commands/create_video_categories.py
  6. 40
      apps/video/management/commands/create_video_playlists.py

57
PODCAST_SETUP_GUIDE.md

@ -54,7 +54,46 @@ PlaylistItem: 12
--- ---
### 3️⃣ تبدیل ویدیوها به پادکست
### 3️⃣ ایجاد دسته‌بندی‌های پادکست
ابتدا باید 8 دسته‌بندی برای پادکست‌ها ایجاد کنید:
```bash
python manage.py create_podcast_categories
```
**این دستور چه کاری انجام می‌دهد:**
- ✅ 8 دسته‌بندی با عناوین روسی ایجاد می‌کند
- ✅ ترتیب (order) برای هر دسته تعیین می‌کند
- ✅ همه را فعال (status=True) می‌کند
**دسته‌بندی‌های ایجاد شده:**
1. Пророки и посланники (پیامبران و فرستادگان)
2. Имамы Ахль аль-Байт (امامان اهل‌بیت)
3. Коранические истории (داستان‌های قرآنی)
4. Исламская философия (فلسفه اسلامی)
5. Нравственность и этика (اخلاق و آداب)
6. История ислама (تاریخ اسلام)
7. Кербела и Ашура (کربلا و عاشورا)
8. Духовное развитие (رشد معنوی)
**خروجی نمونه:**
```
✓ Created category: Пророки и посланники
✓ Created category: Имамы Ахль аль-Байт
...
✓ Successfully created 8 categories!
```
**گزینه‌های اضافی:**
```bash
# پاک کردن دسته‌بندی‌های قبلی و ایجاد مجدد
python manage.py create_podcast_categories --clean
```
---
### 4️⃣ تبدیل ویدیوها به پادکست
این مرحله **مهم‌ترین مرحله** است. ویدیوها را به پادکست (صدا) تبدیل می‌کند: این مرحله **مهم‌ترین مرحله** است. ویدیوها را به پادکست (صدا) تبدیل می‌کند:
@ -117,7 +156,7 @@ Processing: Истории пророков в Коране
--- ---
### 4️⃣ ایجاد 10 پلی‌لیست پادکست
### 5️⃣ ایجاد 10 پلی‌لیست پادکست
حالا پادکست‌ها را در 10 پلی‌لیست سازماندهی می‌کنیم: حالا پادکست‌ها را در 10 پلی‌لیست سازماندهی می‌کنیم:
@ -171,7 +210,7 @@ python manage.py create_podcast_playlists --dry-run
--- ---
### 5️⃣ بررسی نتیجه نهایی
### 6️⃣ بررسی نتیجه نهایی
برای اطمینان از موفقیت‌آمیز بودن تمام مراحل: برای اطمینان از موفقیت‌آمیز بودن تمام مراحل:
@ -237,16 +276,20 @@ python manage.py migrate podcast
# 2. پاکسازی داده‌های قدیمی (اختیاری) # 2. پاکسازی داده‌های قدیمی (اختیاری)
python manage.py cleanup_podcast_data --confirm python manage.py cleanup_podcast_data --confirm
# 3. تبدیل ویدیوها به پادکست (مهم!)
# 3. ایجاد دسته‌بندی‌ها (8 category)
python manage.py create_podcast_categories
# 4. تبدیل ویدیوها به پادکست (مهم!)
python manage.py convert_videos_to_podcasts python manage.py convert_videos_to_podcasts
# 4. ایجاد پلی‌لیست‌ها
# 5. ایجاد پلی‌لیست‌ها (با اتصال به categories)
python manage.py create_podcast_playlists python manage.py create_podcast_playlists
# 5. بررسی نتیجه
# 6. بررسی نتیجه
python manage.py shell -c " python manage.py shell -c "
from apps.podcast.models import Podcast, PodcastPlaylist
from apps.podcast.models import Podcast, PodcastPlaylist, PodcastCategory
print(f'Podcasts: {Podcast.objects.count()}') print(f'Podcasts: {Podcast.objects.count()}')
print(f'Categories: {PodcastCategory.objects.count()}')
print(f'Playlists: {PodcastPlaylist.objects.count()}') print(f'Playlists: {PodcastPlaylist.objects.count()}')
" "
``` ```

26
VIDEO_REFACTORING_SUMMARY.md

@ -120,25 +120,41 @@ python manage.py create_video_playlists --dry-run # for testing
5. 🔄 Create new VideoCategories and assign to playlists (if needed) 5. 🔄 Create new VideoCategories and assign to playlists (if needed)
6. 🔄 Test all API endpoints 6. 🔄 Test all API endpoints
## Commands for Future Use
## Commands for Setup (in order)
```bash ```bash
# Clean up all playlist/collection/category data (keeps videos)
# 1. Apply migration (already done)
python manage.py migrate video
# 2. Clean up old data (if needed)
python manage.py cleanup_video_data --confirm python manage.py cleanup_video_data --confirm
# Create 10 playlists with all videos
# 3. Create 8 video categories
python manage.py create_video_categories
# 4. Create 10 playlists with all videos (automatically connects to categories)
python manage.py create_video_playlists python manage.py create_video_playlists
# Check current state
# 5. Check current state
python manage.py shell -c " python manage.py shell -c "
from apps.video.models import Video, VideoPlaylist, VideoCollection, VideoCategory from apps.video.models import Video, VideoPlaylist, VideoCollection, VideoCategory
print(f'Videos: {Video.objects.count()}') print(f'Videos: {Video.objects.count()}')
print(f'Categories: {VideoCategory.objects.count()}')
print(f'Playlists: {VideoPlaylist.objects.count()}') print(f'Playlists: {VideoPlaylist.objects.count()}')
print(f'Collections: {VideoCollection.objects.count()}') print(f'Collections: {VideoCollection.objects.count()}')
print(f'Categories: {VideoCategory.objects.count()}')
" "
``` ```
### Video Categories Created:
1. Пророки и посланники (Prophets and Messengers)
2. Имамы Ахль аль-Байт (Imams of Ahl al-Bayt)
3. Коранические истории (Quranic Stories)
4. Исламская философия (Islamic Philosophy)
5. Нравственность и этика (Morality and Ethics)
6. История ислама (History of Islam)
7. Кербела и Ашура (Karbala and Ashura)
8. Духовное развитие (Spiritual Development)
## Important Notes ## Important Notes
- ⚠️ VideoInCollection model is completely removed - old code referencing it will break - ⚠️ VideoInCollection model is completely removed - old code referencing it will break

88
apps/podcast/management/commands/create_podcast_categories.py

@ -0,0 +1,88 @@
from django.core.management.base import BaseCommand
from django.db import transaction
from apps.podcast.models import PodcastCategory
class Command(BaseCommand):
help = 'Create podcast categories in Russian language'
# Russian podcast categories
CATEGORIES_DATA = [
{
'title': 'Пророки и посланники',
'order': 10
},
{
'title': 'Имамы Ахль аль-Байт',
'order': 20
},
{
'title': 'Коранические истории',
'order': 30
},
{
'title': 'Исламская философия',
'order': 40
},
{
'title': 'Нравственность и этика',
'order': 50
},
{
'title': 'История ислама',
'order': 60
},
{
'title': 'Кербела и Ашура',
'order': 70
},
{
'title': 'Духовное развитие',
'order': 80
}
]
def add_arguments(self, parser):
parser.add_argument(
'--clean',
action='store_true',
help='Delete existing categories before creating new ones'
)
def handle(self, *args, **options):
clean = options.get('clean', False)
if clean:
deleted_count = PodcastCategory.objects.count()
PodcastCategory.objects.all().delete()
self.stdout.write(self.style.WARNING(f'Deleted {deleted_count} existing categories'))
try:
with transaction.atomic():
created_categories = []
for category_data in self.CATEGORIES_DATA:
# Check if category already exists
title = category_data['title']
category, created = PodcastCategory.objects.get_or_create(
title=title,
defaults={
'order': category_data['order'],
'status': True
}
)
if created:
self.stdout.write(self.style.SUCCESS(f'✓ Created category: {category.title}'))
created_categories.append(category)
else:
self.stdout.write(self.style.WARNING(f'⚠ Category already exists: {category.title}'))
if created_categories:
self.stdout.write(self.style.SUCCESS(f'\n✓ Successfully created {len(created_categories)} categories!'))
else:
self.stdout.write(self.style.WARNING('\nNo new categories created (all already exist)'))
except Exception as e:
self.stdout.write(self.style.ERROR(f'\n✗ Error during creation: {str(e)}'))
raise

40
apps/podcast/management/commands/create_podcast_playlists.py

@ -1,63 +1,74 @@
import random import random
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import transaction from django.db import transaction
from apps.podcast.models import Podcast, PodcastPlaylist, PlaylistItem
from apps.podcast.models import Podcast, PodcastPlaylist, PlaylistItem, PodcastCategory
class Command(BaseCommand): class Command(BaseCommand):
help = 'Create 10 podcast playlists in Russian language about prophets and imams, and add all podcasts to each playlist' help = 'Create 10 podcast playlists in Russian language about prophets and imams, and add all podcasts to each playlist'
# Russian playlist data about prophets and imams # Russian playlist data about prophets and imams
# Each playlist has associated category titles
PLAYLISTS_DATA = [ PLAYLISTS_DATA = [
{ {
'title': 'Лекции о Пророке Мухаммаде (да благословит его Аллах)', 'title': 'Лекции о Пророке Мухаммаде (да благословит его Аллах)',
'slogan': 'Аудио лекции о жизни последнего пророка', 'slogan': 'Аудио лекции о жизни последнего пророка',
'description': 'Полная коллекция аудио лекций о жизни, учениях и наследии Пророка Мухаммада (мир ему и благословение Аллаха). Узнайте о его миссии, характере и влиянии на человечество.'
'description': 'Полная коллекция аудио лекций о жизни, учениях и наследии Пророка Мухаммада (мир ему и благословение Аллаха). Узнайте о его миссии, характере и влиянии на человечество.',
'categories': ['Пророки и посланники', 'История ислама']
}, },
{ {
'title': 'Истории пророков в аудио формате', 'title': 'Истории пророков в аудио формате',
'slogan': 'Повествования о посланниках Аллаха', 'slogan': 'Повествования о посланниках Аллаха',
'description': 'Глубокое изучение историй пророков, упомянутых в Священном Коране. От Адама до Мухаммада (мир им всем), узнайте об их испытаниях, учениях и вере в аудио лекциях.'
'description': 'Глубокое изучение историй пророков, упомянутых в Священном Коране. От Адама до Мухаммада (мир им всем), узнайте об их испытаниях, учениях и вере в аудио лекциях.',
'categories': ['Пророки и посланники', 'Коранические истории']
}, },
{ {
'title': 'Имам Али: Аудио наставления', 'title': 'Имам Али: Аудио наставления',
'slogan': 'Мудрость первого Имама в аудио', 'slogan': 'Мудрость первого Имама в аудио',
'description': 'Исследование жизни, учений и мудрости Имама Али ибн Аби Талиба через аудио лекции. Его речи, письма и руководство для верующих.'
'description': 'Исследование жизни, учений и мудрости Имама Али ибн Аби Талиба через аудио лекции. Его речи, письма и руководство для верующих.',
'categories': ['Имамы Ахль аль-Байт', 'Исламская философия']
}, },
{ {
'title': 'Имам Хусейн: Аудио о Кербеле', 'title': 'Имам Хусейн: Аудио о Кербеле',
'slogan': 'Подкасты о жертве ради истины', 'slogan': 'Подкасты о жертве ради истины',
'description': 'Полное понимание событий Ашуры и мученичества Имама Хусейна через аудио материалы. Узнайте о его стойкости против угнетения.'
'description': 'Полное понимание событий Ашуры и мученичества Имама Хусейна через аудио материалы. Узнайте о его стойкости против угнетения.',
'categories': ['Имамы Ахль аль-Байт', 'Кербела и Ашура', 'История ислама']
}, },
{ {
'title': 'Двенадцать Имамов: Аудио курс', 'title': 'Двенадцать Имамов: Аудио курс',
'slogan': 'Светильники руководства в аудио', 'slogan': 'Светильники руководства в аудио',
'description': 'Всестороннее изучение жизни и учений двенадцати непогрешимых Имамов из рода Пророка. Их роль в сохранении истинного ислама в аудио лекциях.'
'description': 'Всестороннее изучение жизни и учений двенадцати непогрешимых Имамов из рода Пророка. Их роль в сохранении истинного ислама в аудио лекциях.',
'categories': ['Имамы Ахль аль-Байт', 'История ислама']
}, },
{ {
'title': 'Фатима аз-Захра: Аудио лекции', 'title': 'Фатима аз-Захра: Аудио лекции',
'slogan': 'Образец для верующих женщин в подкастах', 'slogan': 'Образец для верующих женщин в подкастах',
'description': 'Жизнь, добродетели и положение Фатимы аз-Захры, любимой дочери Пророка Мухаммада. Ее роль как матери Имамов в аудио материалах.'
'description': 'Жизнь, добродетели и положение Фатимы аз-Захры, любимой дочери Пророка Мухаммада. Ее роль как матери Имамов в аудио материалах.',
'categories': ['Имамы Ахль аль-Байт', 'Нравственность и этика']
}, },
{ {
'title': 'Имам Махди: Аудио о ожидании', 'title': 'Имам Махди: Аудио о ожидании',
'slogan': 'Подкасты о обещанном спасителе', 'slogan': 'Подкасты о обещанном спасителе',
'description': 'Понимание концепции Имама Махди, последнего Имама, который установит справедливость на земле. Признаки его появления в аудио лекциях.'
'description': 'Понимание концепции Имама Махди, последнего Имама, который установит справедливость на земле. Признаки его появления в аудио лекциях.',
'categories': ['Имамы Ахль аль-Байт', 'Духовное развитие']
}, },
{ {
'title': 'Чудеса пророков: Аудио рассказы', 'title': 'Чудеса пророков: Аудио рассказы',
'slogan': 'Божественные знамения в подкастах', 'slogan': 'Божественные знамения в подкастах',
'description': 'Исследование чудес, дарованных пророкам Аллахом через аудио. От посоха Мусы до раскола луны Пророком Мухаммадом.'
'description': 'Исследование чудес, дарованных пророкам Аллахом через аудио. От посоха Мусы до раскола луны Пророком Мухаммадом.',
'categories': ['Пророки и посланники', 'Коранические истории']
}, },
{ {
'title': 'Нравственность Ахль аль-Байт: Аудио', 'title': 'Нравственность Ахль аль-Байт: Аудио',
'slogan': 'Духовное совершенствование через подкасты', 'slogan': 'Духовное совершенствование через подкасты',
'description': 'Практические учения Пророка и Имамов о нравственности, этике и духовном росте. Применение исламских принципов в повседневной жизни через аудио.'
'description': 'Практические учения Пророка и Имамов о нравственности, этике и духовном росте. Применение исламских принципов в повседневной жизни через аудио.',
'categories': ['Имамы Ахль аль-Байт', 'Нравственность и этика', 'Духовное развитие']
}, },
{ {
'title': 'Имам Риза: Аудио наследие', 'title': 'Имам Риза: Аудио наследие',
'slogan': 'Восьмой Имам в аудио лекциях', 'slogan': 'Восьмой Имам в аудио лекциях',
'description': 'Жизнь, дискуссии и мученичество Имама Ризы, восьмого Имама. Его диалоги с учеными различных религий и его роль в распространении знаний.'
'description': 'Жизнь, дискуссии и мученичество Имама Ризы, восьмого Имама. Его диалоги с учеными различных религий и его роль в распространении знаний.',
'categories': ['Имамы Ахль аль-Байт', 'Исламская философия', 'История ислама']
} }
] ]
@ -106,6 +117,13 @@ class Command(BaseCommand):
status=True status=True
) )
# Add categories to playlist
category_titles = playlist_data.get('categories', [])
if category_titles:
categories = PodcastCategory.objects.filter(title__in=category_titles)
playlist.categories.set(categories)
self.stdout.write(f' Added {categories.count()} categories')
self.stdout.write(self.style.SUCCESS(f'✓ Created playlist: {playlist.title}')) self.stdout.write(self.style.SUCCESS(f'✓ Created playlist: {playlist.title}'))
# Add all podcasts to this playlist # Add all podcasts to this playlist

88
apps/video/management/commands/create_video_categories.py

@ -0,0 +1,88 @@
from django.core.management.base import BaseCommand
from django.db import transaction
from apps.video.models import VideoCategory
class Command(BaseCommand):
help = 'Create video categories in Russian language'
# Russian video categories
CATEGORIES_DATA = [
{
'title': 'Пророки и посланники',
'order': 10
},
{
'title': 'Имамы Ахль аль-Байт',
'order': 20
},
{
'title': 'Коранические истории',
'order': 30
},
{
'title': 'Исламская философия',
'order': 40
},
{
'title': 'Нравственность и этика',
'order': 50
},
{
'title': 'История ислама',
'order': 60
},
{
'title': 'Кербела и Ашура',
'order': 70
},
{
'title': 'Духовное развитие',
'order': 80
}
]
def add_arguments(self, parser):
parser.add_argument(
'--clean',
action='store_true',
help='Delete existing categories before creating new ones'
)
def handle(self, *args, **options):
clean = options.get('clean', False)
if clean:
deleted_count = VideoCategory.objects.count()
VideoCategory.objects.all().delete()
self.stdout.write(self.style.WARNING(f'Deleted {deleted_count} existing categories'))
try:
with transaction.atomic():
created_categories = []
for category_data in self.CATEGORIES_DATA:
# Check if category already exists
title = category_data['title']
category, created = VideoCategory.objects.get_or_create(
title=title,
defaults={
'order': category_data['order'],
'status': True
}
)
if created:
self.stdout.write(self.style.SUCCESS(f'✓ Created category: {category.title}'))
created_categories.append(category)
else:
self.stdout.write(self.style.WARNING(f'⚠ Category already exists: {category.title}'))
if created_categories:
self.stdout.write(self.style.SUCCESS(f'\n✓ Successfully created {len(created_categories)} categories!'))
else:
self.stdout.write(self.style.WARNING('\nNo new categories created (all already exist)'))
except Exception as e:
self.stdout.write(self.style.ERROR(f'\n✗ Error during creation: {str(e)}'))
raise

40
apps/video/management/commands/create_video_playlists.py

@ -1,63 +1,74 @@
import random import random
from django.core.management.base import BaseCommand from django.core.management.base import BaseCommand
from django.db import transaction from django.db import transaction
from apps.video.models import Video, VideoPlaylist, PlaylistItem
from apps.video.models import Video, VideoPlaylist, PlaylistItem, VideoCategory
class Command(BaseCommand): class Command(BaseCommand):
help = 'Create 10 video playlists in Russian language about prophets and imams, and add all videos to each playlist' help = 'Create 10 video playlists in Russian language about prophets and imams, and add all videos to each playlist'
# Russian playlist data about prophets and imams # Russian playlist data about prophets and imams
# Each playlist has associated category titles
PLAYLISTS_DATA = [ PLAYLISTS_DATA = [
{ {
'title': 'Жизнь Пророка Мухаммада (да благословит его Аллах)', 'title': 'Жизнь Пророка Мухаммада (да благословит его Аллах)',
'slogan': 'Изучение жизни последнего пророка', 'slogan': 'Изучение жизни последнего пророка',
'description': 'Полная коллекция лекций о жизни, учениях и наследии Пророка Мухаммада (мир ему и благословение Аллаха). Узнайте о его миссии, характере и влиянии на человечество.'
'description': 'Полная коллекция лекций о жизни, учениях и наследии Пророка Мухаммада (мир ему и благословение Аллаха). Узнайте о его миссии, характере и влиянии на человечество.',
'categories': ['Пророки и посланники', 'История ислама']
}, },
{ {
'title': 'Истории пророков в Коране', 'title': 'Истории пророков в Коране',
'slogan': 'Коранические повествования о посланниках Аллаха', 'slogan': 'Коранические повествования о посланниках Аллаха',
'description': 'Глубокое изучение историй пророков, упомянутых в Священном Коране. От Адама до Мухаммада (мир им всем), узнайте об их испытаниях, учениях и вере.'
'description': 'Глубокое изучение историй пророков, упомянутых в Священном Коране. От Адама до Мухаммада (мир им всем), узнайте об их испытаниях, учениях и вере.',
'categories': ['Пророки и посланники', 'Коранические истории']
}, },
{ {
'title': 'Имам Али: Врата знаний', 'title': 'Имам Али: Врата знаний',
'slogan': 'Мудрость и наследие первого Имама', 'slogan': 'Мудрость и наследие первого Имама',
'description': 'Исследование жизни, учений и мудрости Имама Али ибн Аби Талиба, двоюродного брата и зятя Пророка Мухаммада. Его речи, письма и руководство.'
'description': 'Исследование жизни, учений и мудрости Имама Али ибн Аби Талиба, двоюродного брата и зятя Пророка Мухаммада. Его речи, письма и руководство.',
'categories': ['Имамы Ахль аль-Байт', 'Исламская философия']
}, },
{ {
'title': 'Имам Хусейн и трагедия Кербелы', 'title': 'Имам Хусейн и трагедия Кербелы',
'slogan': 'Жертва ради истины и справедливости', 'slogan': 'Жертва ради истины и справедливости',
'description': 'Полное понимание событий Ашуры и мученичества Имама Хусейна. Узнайте о его стойкости против угнетения и его вечном послании человечеству.'
'description': 'Полное понимание событий Ашуры и мученичества Имама Хусейна. Узнайте о его стойкости против угнетения и его вечном послании человечеству.',
'categories': ['Имамы Ахль аль-Байт', 'Кербела и Ашура', 'История ислама']
}, },
{ {
'title': 'Двенадцать Имамов Ахль аль-Байт', 'title': 'Двенадцать Имамов Ахль аль-Байт',
'slogan': 'Светильники руководства', 'slogan': 'Светильники руководства',
'description': 'Всестороннее изучение жизни и учений двенадцати непогрешимых Имамов из рода Пророка. Их роль в сохранении истинного ислама.'
'description': 'Всестороннее изучение жизни и учений двенадцати непогрешимых Имамов из рода Пророка. Их роль в сохранении истинного ислама.',
'categories': ['Имамы Ахль аль-Байт', 'История ислама']
}, },
{ {
'title': 'Фатима аз-Захра: Дочь Пророка', 'title': 'Фатима аз-Захра: Дочь Пророка',
'slogan': 'Образец для верующих женщин', 'slogan': 'Образец для верующих женщин',
'description': 'Жизнь, добродетели и положение Фатимы аз-Захры, любимой дочери Пророка Мухаммада. Ее роль как матери Имамов и ее духовное величие.'
'description': 'Жизнь, добродетели и положение Фатимы аз-Захры, любимой дочери Пророка Мухаммада. Ее роль как матери Имамов и ее духовное величие.',
'categories': ['Имамы Ахль аль-Байт', 'Нравственность и этика']
}, },
{ {
'title': 'Имам Махди: Обещанный спаситель', 'title': 'Имам Махди: Обещанный спаситель',
'slogan': 'Ожидание и подготовка к появлению', 'slogan': 'Ожидание и подготовка к появлению',
'description': 'Понимание концепции Имама Махди, последнего Имама, который установит справедливость на земле. Признаки его появления и наша роль в ожидании.'
'description': 'Понимание концепции Имама Махди, последнего Имама, который установит справедливость на земле. Признаки его появления и наша роль в ожидании.',
'categories': ['Имамы Ахль аль-Байт', 'Духовное развитие']
}, },
{ {
'title': 'Пророки и их чудеса', 'title': 'Пророки и их чудеса',
'slogan': 'Божественные знамения и доказательства', 'slogan': 'Божественные знамения и доказательства',
'description': 'Исследование чудес, дарованных пророкам Аллахом. От посоха Мусы до раскола луны Пророком Мухаммадом, узнайте о знамениях Всевышнего.'
'description': 'Исследование чудес, дарованных пророкам Аллахом. От посоха Мусы до раскола луны Пророком Мухаммадом, узнайте о знамениях Всевышнего.',
'categories': ['Пророки и посланники', 'Коранические истории']
}, },
{ {
'title': 'Учения Ахль аль-Байт о нравственности', 'title': 'Учения Ахль аль-Байт о нравственности',
'slogan': 'Духовное совершенствование через Ислам', 'slogan': 'Духовное совершенствование через Ислам',
'description': 'Практические учения Пророка и Имамов о нравственности, этике и духовном росте. Применение исламских принципов в повседневной жизни.'
'description': 'Практические учения Пророка и Имамов о нравственности, этике и духовном росте. Применение исламских принципов в повседневной жизни.',
'categories': ['Имамы Ахль аль-Байт', 'Нравственность и этика', 'Духовное развитие']
}, },
{ {
'title': 'Имам Риза и его наследие', 'title': 'Имам Риза и его наследие',
'slogan': 'Восьмой Имам и его вклад', 'slogan': 'Восьмой Имам и его вклад',
'description': 'Жизнь, дискуссии и мученичество Имама Ризы, восьмого Имама. Его диалоги с учеными различных религий и его роль в распространении знаний.'
'description': 'Жизнь, дискуссии и мученичество Имама Ризы, восьмого Имама. Его диалоги с учеными различных религий и его роль в распространении знаний.',
'categories': ['Имамы Ахль аль-Байт', 'Исламская философия', 'История ислама']
} }
] ]
@ -106,6 +117,13 @@ class Command(BaseCommand):
status=True status=True
) )
# Add categories to playlist
category_titles = playlist_data.get('categories', [])
if category_titles:
categories = VideoCategory.objects.filter(title__in=category_titles)
playlist.categories.set(categories)
self.stdout.write(f' Added {categories.count()} categories')
self.stdout.write(self.style.SUCCESS(f'✓ Created playlist: {playlist.title}')) self.stdout.write(self.style.SUCCESS(f'✓ Created playlist: {playlist.title}'))
# Add all videos to this playlist with random priority # Add all videos to this playlist with random priority

Loading…
Cancel
Save