@ -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 )