diff --git a/apps/hadis/management/commands/seed_complete_hadis_data.py b/apps/hadis/management/commands/seed_complete_hadis_data.py index 8a5978e..717a280 100644 --- a/apps/hadis/management/commands/seed_complete_hadis_data.py +++ b/apps/hadis/management/commands/seed_complete_hadis_data.py @@ -319,16 +319,60 @@ class Command(BaseCommand): self.created_counts['tags'] = len(self.tags) def create_narrator_layers(self): - """Create narrator layers""" + """Create narrator layers - fixes empty slugs first""" + from django.utils.text import slugify + + # Fix existing layers with empty or invalid slugs + existing_layers = NarratorLayer.objects.all() + for layer in existing_layers: + if not layer.slug or not layer.slug.strip(): + # Generate proper slug + try: + if layer.name and isinstance(layer.name, list) and len(layer.name) > 0: + text = layer.name[0].get('text', '').strip() + if text: + new_slug = slugify(text) + else: + new_slug = f"layer-{layer.number}" + else: + new_slug = f"layer-{layer.number}" + except (IndexError, KeyError, AttributeError, TypeError): + new_slug = f"layer-{layer.number}" + + # Ensure uniqueness + counter = 1 + original_slug = new_slug + while NarratorLayer.objects.filter(slug=new_slug).exclude(pk=layer.pk).exists(): + new_slug = f"{original_slug}-{counter}" + counter += 1 + + layer.slug = new_slug + layer.save(update_fields=['slug']) + self.stdout.write(f"Fixed slug for layer {layer.number}: {new_slug}") + + # Now create or get narrator layers for layer_data in RUSSIAN_NARRATOR_LAYERS: - layer, created = NarratorLayer.objects.get_or_create( - number=layer_data['number'], - defaults={ - 'name': [{'language_code': 'ru', 'text': layer_data['name']}], - 'description': [{'language_code': 'ru', 'text': layer_data['description']}] - } - ) - self.narrator_layers.append(layer) + try: + layer, created = NarratorLayer.objects.get_or_create( + number=layer_data['number'], + defaults={ + 'name': [{'language_code': 'ru', 'text': layer_data['name']}], + 'description': [{'language_code': 'ru', 'text': layer_data['description']}] + } + ) + self.narrator_layers.append(layer) + except Exception as e: + # If creation fails, try to get existing layer by number + self.stdout.write(self.style.WARNING( + f"Warning creating layer {layer_data['number']}: {str(e)}" + )) + try: + layer = NarratorLayer.objects.get(number=layer_data['number']) + self.narrator_layers.append(layer) + except NarratorLayer.DoesNotExist: + self.stdout.write(self.style.ERROR( + f"Could not create or find layer {layer_data['number']}" + )) self.created_counts['narrator_layers'] = len(self.narrator_layers)