@ -270,33 +270,46 @@ class Command(BaseCommand):
from django.db.models import Count , Q
self . stdout . write ( ' Fixing NarratorLayer empty slugs... ' )
# Fix NarratorLayer empty slugs
empty_layers = NarratorLayer . objects . filter ( Q ( slug__isnull = True ) | Q ( slug = ' ' ) | Q ( slug = ' ' ) )
self . stdout . write ( f ' Found {empty_layers.count()} layers with empty slugs ' )
# Fix NarratorLayer empty slugs - be more aggressive
# First, let's see all layers
all_layers = NarratorLayer . objects . all ( )
self . stdout . write ( f ' Total layers in database: {all_layers.count()} ' )
for layer in empty_layers :
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 )
fixed_count = 0
for layer in all_layers :
needs_fix = False
# Check if slug is problematic
if not layer . slug or layer . slug . strip ( ) == ' ' :
needs_fix = True
self . stdout . write ( f ' Layer {layer.pk} (number={layer.number}) has empty slug ' )
if needs_fix :
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} "
else :
except ( IndexError , KeyError , AttributeError , TypeError ) :
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 layer {layer.pk} (number={layer.number}): " {new_slug} " ' )
# 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 ' ] )
fixed_count + = 1
self . stdout . write ( f ' Fixed layer {layer.pk} (number={layer.number}): " {new_slug} " ' )
self . stdout . write ( f ' Fixed {fixed_count} layers with empty slugs ' )
self . stdout . write ( ' Fixing TransmitterReliability duplicates... ' )
# Fix TransmitterReliability empty and duplicate slugs
@ -458,34 +471,32 @@ class Command(BaseCommand):
""" Create narrator layers (slugs already fixed in Phase 0) """
# Create or get narrator layers - use filter().first() to avoid duplicates
for layer_data in RUSSIAN_NARRATOR_LAYERS :
try :
# Try to find existing layer by number
layer = NarratorLayer . objects . filter ( number = layer_data [ ' number ' ] ) . first ( )
if layer :
# Layer already exists
self . stdout . write ( f " Using existing layer {layer_data[ ' number ' ]} " )
else :
# Create new layer
# Try to find existing layer by number first
layer = NarratorLayer . objects . filter ( number = layer_data [ ' number ' ] ) . first ( )
if layer :
# Layer already exists - just use it
self . stdout . write ( f " Using existing layer {layer_data[ ' number ' ]} " )
self . narrator_layers . append ( layer )
else :
# Create new layer - but be defensive
try :
layer = NarratorLayer . objects . create (
number = layer_data [ ' number ' ] ,
name = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' name ' ] } ] ,
description = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' description ' ] } ]
)
self . stdout . write ( f " Created new layer {layer_data[ ' number ' ]} " )
self . narrator_layers . append ( layer )
except Exception as e :
self . stdout . write ( self . style . ERROR (
f " Error with layer {layer_data[ ' number ' ]}: {str(e)} "
) )
# Try one more time to get by number
try :
layer = NarratorLayer . objects . filter ( number = layer_data [ ' number ' ] ) . first ( )
if layer :
self . narrator_layers . append ( layer )
except Exception as e2 :
self . stdout . write ( self . style . ERROR ( f " Final attempt failed: {str(e2)} " ) )
self . narrator_layers . append ( layer )
except Exception as e :
self . stdout . write ( self . style . WARNING (
f " Could not create layer {layer_data[ ' number ' ]}: {str(e)} - skipping "
) )
# If we don't have enough layers, try to get any existing ones
if len ( self . narrator_layers ) < 3 :
self . stdout . write ( self . style . WARNING ( ' Not enough narrator layers, fetching all existing ones ' ) )
self . narrator_layers = list ( NarratorLayer . objects . all ( ) )
self . created_counts [ ' narrator_layers ' ] = len ( self . narrator_layers )