diff --git a/specifyweb/specify/migration_utils/update_schema_config.py b/specifyweb/specify/migration_utils/update_schema_config.py index 775299a8d07..a495db2ba0f 100644 --- a/specifyweb/specify/migration_utils/update_schema_config.py +++ b/specifyweb/specify/migration_utils/update_schema_config.py @@ -91,6 +91,7 @@ def update_table_schema_config_with_defaults( apps = global_apps ): Splocalecontainer = apps.get_model('specify', 'Splocalecontainer') + Splocalecontaineritem = apps.get_model('specify', 'Splocalecontaineritem') Splocaleitemstr = apps.get_model('specify', 'Splocaleitemstr') table = datamodel.get_table(table_name) @@ -108,11 +109,13 @@ def update_table_schema_config_with_defaults( name=table.name, discipline_id=discipline_id, schema_type=0, - description=camel_to_spaced_title_case(uncapitilize(table.name)) if description is None else description, - language="en" + description=camel_to_spaced_title_case(uncapitilize(table.name)) + if description is None + else description, + language="en", ) - # Create Splocalecontainer for the table + # Create or fetch Splocalecontainer for the table (this already encodes discipline_id) sp_local_container, is_new = Splocalecontainer.objects.get_or_create( name=table_config.name.lower(), discipline_id=discipline_id, @@ -121,8 +124,12 @@ def update_table_schema_config_with_defaults( issystem=table.system, version=0, ) - if not is_new: - return # If the container already exists, we don't need to update it + + if Splocalecontaineritem.objects.filter( + container=sp_local_container, + name=table_config.name.lower(), + ).exists(): + return # Create a Splocaleitemstr for the table name and description for k, text in { @@ -138,8 +145,12 @@ def update_table_schema_config_with_defaults( Splocaleitemstr.objects.get_or_create(**item_str) for field in table.all_fields: - update_table_field_schema_config_with_defaults(table_name, discipline_id, field.name, apps) - + update_table_field_schema_config_with_defaults( + table_name, + discipline_id, + field.name, + apps, + ) def revert_table_schema_config(table_name, apps=global_apps): Splocalecontainer = apps.get_model('specify', 'Splocalecontainer')