@ -270,11 +270,21 @@ class Command(BaseCommand):
from django.db.models import Count , Q
from django.db.models import Count , Q
self . stdout . write ( ' Fixing NarratorLayer empty slugs... ' )
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 :
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 :
try :
if layer . name and isinstance ( layer . name , list ) and len ( layer . name ) > 0 :
if layer . name and isinstance ( layer . name , list ) and len ( layer . name ) > 0 :
text = layer . name [ 0 ] . get ( ' text ' , ' ' ) . strip ( )
text = layer . name [ 0 ] . get ( ' text ' , ' ' ) . strip ( )
@ -296,8 +306,11 @@ class Command(BaseCommand):
layer . slug = new_slug
layer . slug = new_slug
layer . save ( update_fields = [ ' 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 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... ' )
self . stdout . write ( ' Fixing TransmitterReliability duplicates... ' )
# Fix TransmitterReliability empty and duplicate slugs
# Fix TransmitterReliability empty and duplicate slugs
empty_reliability = TransmitterReliability . objects . filter ( Q ( slug__isnull = True ) | Q ( slug = ' ' ) | Q ( slug = ' ' ) )
empty_reliability = TransmitterReliability . objects . filter ( Q ( slug__isnull = True ) | Q ( slug = ' ' ) | Q ( slug = ' ' ) )
@ -458,34 +471,32 @@ class Command(BaseCommand):
""" Create narrator layers (slugs already fixed in Phase 0) """
""" Create narrator layers (slugs already fixed in Phase 0) """
# Create or get narrator layers - use filter().first() to avoid duplicates
# Create or get narrator layers - use filter().first() to avoid duplicates
for layer_data in RUSSIAN_NARRATOR_LAYERS :
for layer_data in RUSSIAN_NARRATOR_LAYERS :
try :
# Try to find existing layer by number
# Try to find existing layer by number first
layer = NarratorLayer . objects . filter ( number = layer_data [ ' number ' ] ) . first ( )
layer = NarratorLayer . objects . filter ( number = layer_data [ ' number ' ] ) . first ( )
if layer :
if layer :
# Layer already exists
# Layer already exists - just use it
self . stdout . write ( f " Using existing layer {layer_data[ ' number ' ]} " )
self . stdout . write ( f " Using existing layer {layer_data[ ' number ' ]} " )
self . narrator_layers . append ( layer )
else :
else :
# Create new layer
# Create new layer - but be defensive
try :
layer = NarratorLayer . objects . create (
layer = NarratorLayer . objects . create (
number = layer_data [ ' number ' ] ,
number = layer_data [ ' number ' ] ,
name = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' name ' ] } ] ,
name = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' name ' ] } ] ,
description = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' description ' ] } ]
description = [ { ' language_code ' : ' ru ' , ' text ' : layer_data [ ' description ' ] } ]
)
)
self . stdout . write ( f " Created new layer {layer_data[ ' number ' ]} " )
self . stdout . write ( f " Created new layer {layer_data[ ' number ' ]} " )
self . narrator_layers . append ( layer )
self . narrator_layers . append ( layer )
except Exception as e :
except Exception as e :
self . stdout . write ( self . style . ERROR (
f " Error with layer {layer_data[' number ' ]}: {str(e)} "
self . stdout . write ( self . style . WARNING (
f " Could not create layer {layer_data[' number ' ]}: {str(e)} - skipping "
) )
) )
# 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)} " ) )
# 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 )
self . created_counts [ ' narrator_layers ' ] = len ( self . narrator_layers )