mirror of
https://github.com/inventree/InvenTree
synced 2024-08-30 18:33:04 +00:00
Improve logic for non-nullable fields (#6962)
This commit is contained in:
parent
cdeaa81295
commit
afa6586e10
@ -84,25 +84,48 @@ class InvenTreeResource(ModelResource):
|
|||||||
|
|
||||||
return [f for f in fields if f.column_name not in fields_to_exclude]
|
return [f for f in fields if f.column_name not in fields_to_exclude]
|
||||||
|
|
||||||
|
def before_import(self, dataset, using_transactions, dry_run, **kwargs):
|
||||||
|
"""Run custom code before importing data.
|
||||||
|
|
||||||
|
- Determine the list of fields which need to be converted to empty strings
|
||||||
|
"""
|
||||||
|
# Construct a map of field names
|
||||||
|
db_fields = {field.name: field for field in self.Meta.model._meta.fields}
|
||||||
|
|
||||||
|
for field_name, field in self.fields.items():
|
||||||
|
# Skip read-only fields (they cannot be imported)
|
||||||
|
if field.readonly:
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Determine the name of the associated column in the dataset
|
||||||
|
column = getattr(field, 'column_name', field_name)
|
||||||
|
|
||||||
|
# Determine the attribute name of the associated database field
|
||||||
|
attribute = getattr(field, 'attribute', field_name)
|
||||||
|
|
||||||
|
# Check if the associated database field is a non-nullable string
|
||||||
|
if db_field := db_fields.get(attribute):
|
||||||
|
if (
|
||||||
|
isinstance(db_field, CharField)
|
||||||
|
and db_field.blank
|
||||||
|
and not db_field.null
|
||||||
|
):
|
||||||
|
if column not in self.CONVERT_NULL_FIELDS:
|
||||||
|
self.CONVERT_NULL_FIELDS.append(column)
|
||||||
|
|
||||||
|
return super().before_import(dataset, using_transactions, dry_run, **kwargs)
|
||||||
|
|
||||||
def before_import_row(self, row, row_number=None, **kwargs):
|
def before_import_row(self, row, row_number=None, **kwargs):
|
||||||
"""Run custom code before importing each row.
|
"""Run custom code before importing each row.
|
||||||
|
|
||||||
- Convert any null fields to empty strings, for fields which do not support null values
|
- Convert any null fields to empty strings, for fields which do not support null values
|
||||||
"""
|
"""
|
||||||
# We can automatically determine which fields might need such a conversion
|
|
||||||
for field in self.Meta.model._meta.fields:
|
|
||||||
if (
|
|
||||||
isinstance(field, CharField)
|
|
||||||
and field.blank
|
|
||||||
and not field.null
|
|
||||||
and field.name not in self.CONVERT_NULL_FIELDS
|
|
||||||
):
|
|
||||||
self.CONVERT_NULL_FIELDS.append(field.name)
|
|
||||||
|
|
||||||
for field in self.CONVERT_NULL_FIELDS:
|
for field in self.CONVERT_NULL_FIELDS:
|
||||||
if field in row and row[field] is None:
|
if field in row and row[field] is None:
|
||||||
row[field] = ''
|
row[field] = ''
|
||||||
|
|
||||||
|
return super().before_import_row(row, row_number, **kwargs)
|
||||||
|
|
||||||
|
|
||||||
class CustomRateAdmin(RateAdmin):
|
class CustomRateAdmin(RateAdmin):
|
||||||
"""Admin interface for the Rate class."""
|
"""Admin interface for the Rate class."""
|
||||||
|
Loading…
Reference in New Issue
Block a user