2
0
mirror of https://github.com/inventree/InvenTree.git synced 2025-12-14 08:19:54 +00:00

Fix for string form fields (#10814)

* Fix for string form fields

- replace null values with empty strings

* Expose more serializer metadata

* Check if null values are not allowed

* Fix type

* Try removing feature

* Reduce deltas

* Remove extra field attrs entirely (for testing)

* Comment out changes

* Tweak form values

* Fix for form validation
This commit is contained in:
Oliver
2025-12-06 22:54:29 +11:00
committed by GitHub
parent ffec087618
commit efc8fb816d
3 changed files with 37 additions and 7 deletions

View File

@@ -420,6 +420,13 @@ class InvenTreeMetadata(SimpleMetadata):
if field_info['type'] == 'dependent field':
field_info['depends_on'] = field.depends_on
# Extends with extra attributes from the serializer
extra_field_attributes = ['allow_blank', 'allow_null']
for attr in extra_field_attributes:
if hasattr(field, attr):
field_info[attr] = getattr(field, attr)
# Extend field info if the field has a get_field_info method
if (
not field_info.get('read_only')

View File

@@ -48,6 +48,8 @@ export type ApiFormFieldHeader = {
* @param model : The model to use for related fields
* @param filters : Optional API filters to apply to related fields
* @param required : Whether the field is required
* @param allow_null: Whether the field allows null values
* @param allow_blank: Whether the field allows blank values
* @param hidden : Whether the field is hidden
* @param disabled : Whether the field is disabled
* @param error : Optional error message to display
@@ -103,6 +105,8 @@ export type ApiFormFieldType = {
choices?: ApiFormFieldChoice[];
hidden?: boolean;
disabled?: boolean;
allow_null?: boolean;
allow_blank?: boolean;
exclude?: boolean;
read_only?: boolean;
placeholder?: string;

View File

@@ -24,7 +24,11 @@ import { type NavigateFunction, useNavigate } from 'react-router-dom';
import { isTrue } from '@lib/functions/Conversion';
import { getDetailUrl } from '@lib/functions/Navigation';
import type { ApiFormFieldSet, ApiFormProps } from '@lib/types/Forms';
import type {
ApiFormFieldSet,
ApiFormFieldType,
ApiFormProps
} from '@lib/types/Forms';
import { useApi } from '../../contexts/ApiContext';
import {
type NestedDict,
@@ -375,16 +379,29 @@ export function ApiForm({
Object.keys(data).forEach((key: string) => {
let value: any = data[key];
const field_type = fields[key]?.field_type;
const exclude = fields[key]?.exclude;
const field: ApiFormFieldType = fields[key] ?? {};
const field_type = field?.field_type;
const exclude = field?.exclude;
if (field_type == 'file upload' && !!value) {
hasFiles = true;
}
// Ensure any boolean values are actually boolean
if (field_type === 'boolean') {
value = isTrue(value) || false;
// Special consideration for various field types
switch (field_type) {
case 'boolean':
// Ensure boolean values are actually boolean
value = isTrue(value) || false;
break;
case 'string':
// Replace null string values with an empty string
if (value === null && field?.allow_null == false) {
value = '';
jsonData[key] = value;
}
break;
default:
break;
}
// Stringify any JSON objects
@@ -393,7 +410,9 @@ export function ApiForm({
case 'file upload':
break;
default:
value = JSON.stringify(value);
if (value !== null && value !== undefined) {
value = JSON.stringify(value);
}
break;
}
}