""" Basic data seeding management command for Hadis app models. This command creates only the essential records needed for the app to function. """ from django.core.management.base import BaseCommand, CommandError from django.db import transaction # Import models from apps.hadis.models import HadisSect, HadisStatus, HadisTag class Command(BaseCommand): help = 'Seed basic data for Hadis app models' def add_arguments(self, parser): parser.add_argument( '--clear', action='store_true', help='Clear existing basic data before seeding', ) def handle(self, **options): if options['clear']: self.clear_existing_data() try: with transaction.atomic(): self.stdout.write( self.style.SUCCESS('Starting basic Hadis data seeding...') ) # Seed basic data statuses = self.seed_hadis_statuses() tags = self.seed_hadis_tags() sects = self.seed_hadis_sects() self.stdout.write( self.style.SUCCESS( f'Successfully seeded basic data: ' f'{len(statuses)} statuses, {len(tags)} tags, {len(sects)} sects' ) ) except Exception as e: self.stdout.write( self.style.ERROR(f'Error during seeding: {str(e)}') ) raise CommandError(f'Seeding failed: {str(e)}') def clear_existing_data(self): """Clear existing basic data""" self.stdout.write("Clearing existing basic data...") HadisSect.objects.all().delete() HadisStatus.objects.all().delete() HadisTag.objects.all().delete() self.stdout.write("Basic data cleared.") def seed_hadis_statuses(self): """Create HadisStatus records""" self.stdout.write("Creating Hadis Statuses...") statuses_data = [ {'title': 'Достоверный', 'color': 'green', 'order': 1}, {'title': 'Хороший', 'color': 'blue', 'order': 2}, {'title': 'Слабый', 'color': 'yellow', 'order': 3}, {'title': 'Выдуманный', 'color': 'red', 'order': 4}, ] statuses = [] for data in statuses_data: status, created = HadisStatus.objects.get_or_create( title=data['title'], defaults=data ) statuses.append(status) if created: self.stdout.write(f" Created status: {status.title}") return statuses def seed_hadis_tags(self): """Create HadisTag records""" self.stdout.write("Creating Hadis Tags...") tags_data = [ 'Поклонение', 'Молитва', 'Пост', 'Хадж', 'Закят', 'Нравственность', 'Терпение', 'Справедливость', 'Фикх', 'Предписания', 'Толкование', 'Коран', 'Имамат', 'Мольба', 'Единобожие' ] tags = [] for tag_title in tags_data: tag, created = HadisTag.objects.get_or_create( title=tag_title, defaults={'status': True} ) tags.append(tag) if created: self.stdout.write(f" Created tag: {tag.title}") return tags def seed_hadis_sects(self): """Create HadisSect records""" self.stdout.write("Creating Hadis Sects...") sects_data = [ {'sect_type': 'shia', 'title': 'Шииты-двунадесятники', 'is_active': True, 'order': 1}, {'sect_type': 'sunni', 'title': 'Сунниты', 'is_active': True, 'order': 2}, ] sects = [] for data in sects_data: self.stdout.write(f" Processing sect: {data['sect_type']}") # Check if sect exists try: sect = HadisSect.objects.get(sect_type=data['sect_type']) self.stdout.write(f" Sect already exists: {sect.title}") sects.append(sect) except HadisSect.DoesNotExist: # Create new sect self.stdout.write(f" Creating new sect: {data['sect_type']}") sect = HadisSect( sect_type=data['sect_type'], title=data['title'], is_active=data['is_active'], order=data['order'] ) sect.save() self.stdout.write(f" Created sect: {sect.title}") sects.append(sect) return sects