{"record":{"id":"22881fc0d4b37e33","repo":"HumanSignal/label-studio","slug":"select-an-existing-column-or-enter-a-new-column-na","errorCode":null,"errorMessage":"Select an existing column or enter a new column name.","messagePattern":"Select an existing column or enter a new column name\\.","errorType":"validation","errorClass":"ValidationError","httpStatus":400,"severity":"error","filePath":"label_studio/data_manager/actions/data_columns.py","lineNumber":38,"sourceCode":"all_permissions = AllPermissions()\n\n\ndef add_or_modify_columns_enabled(project):\n    return flag_set('fflag_utc_1012_add_or_modify_columns', organization=project.organization)\n\n\ndef _validate_column_request(request_data, project):\n    value_name = (\n        request_data.get('column_name') or request_data.get('value_name') or request_data.get('existing_column')\n    )\n    value_type = request_data.get('value_type', 'String')\n    value = request_data.get('value', '')\n\n    if value_type not in {'String', 'Number', 'Expression'}:\n        raise ValidationError({'value_type': 'Choose a supported column type.'})\n\n    if not isinstance(value_name, str) or not value_name.strip():\n        raise ValidationError({'column_name': 'Select an existing column or enter a new column name.'})\n\n    value_name = value_name.strip()\n    column_exists = value_name in project.summary.all_data_columns\n    if not column_exists:\n        column_exists = project.tasks.filter(data__has_key=value_name).exists()\n    mode = 'update' if column_exists else 'add'\n    # Existing columns (e.g. imported spreadsheet headers) stay editable, but a new column must be\n    # one the Data Manager can filter and sort on.\n    if mode == 'add' and not is_queryable_column_name(value_name):\n        raise ValidationError(\n            {'column_name': f'Column name cannot contain {UNQUERYABLE_COLUMN_NAME_CHARACTERS}.'},\n        )\n    try:\n        value = {'String': str, 'Number': float, 'Expression': str}[value_type](value)\n    except (TypeError, ValueError) as exc:\n        raise ValidationError({'value': f'Enter a valid {value_type.lower()} value.'}) from exc\n\n    return mode, value_name, value_type, value","sourceCodeStart":20,"sourceCodeEnd":56,"githubUrl":"https://github.com/HumanSignal/label-studio/blob/0b49e9b53917880baf1dd85d574fe5541a9aafb2/label_studio/data_manager/actions/data_columns.py#L20-L56","documentation":"_validate_column_request requires column_name (or value_name/existing_column) to be a non-empty string. If it is missing, empty, whitespace-only, or not a string, ValidationError {'column_name': 'Select an existing column or enter a new column name.'} is raised.","triggerScenarios":"Submitting add_data_field without column_name/value_name, with column_name: '', or with a non-string (e.g. number) value.","commonSituations":"Script omits the column name field; UI form field left blank; payload key mismatch (sending 'name' instead of 'column_name').","solutions":["Include a non-empty string column_name (or value_name/existing_column) in the action request data.","Trim the value before sending; whitespace-only names are rejected.","Fix the payload key so it matches column_name/value_name/existing_column."],"exampleFix":"// before\n{'value_type': 'String', 'value': 'x'}\n// after\n{'value_type': 'String', 'value': 'x', 'column_name': 'my_column'}","handlingStrategy":"validation","validationCode":"name = request_data.get('column_name') or request_data.get('value_name')\nassert isinstance(name, str) and name.strip(), 'column_name is required and must be a non-empty string'","typeGuard":"def has_valid_column_name(payload):\n    name = payload.get('column_name') or payload.get('value_name') or payload.get('existing_column')\n    return isinstance(name, str) and bool(name.strip())","tryCatchPattern":"from rest_framework.exceptions import ValidationError\ntry:\n    add_data_field(project, qs, request=request)\nexcept ValidationError as e:\n    if 'column_name' in e.message_dict:\n        prompt_user_for_column_name()","preventionTips":["Always trim and require the column name in the UI form.","Validate payload keys before submitting the action.","Use a single canonical key (column_name) in client code."],"tags":["django","validation","data-manager","columns"],"backgroundTag":"missing-required-field","analyzedSha":"0b49e9b53917880baf1dd85d574fe5541a9aafb2","analyzedAt":"2026-08-29T00:39:52.578Z","schemaVersion":2},"datasetVersion":"2026-08-29T02:17:18.158Z"}