Fixes: #17497 - Handle invalid accessor fields in bulk import forms (#17594)

* Add handling for FieldError to CSVModelChoiceField.to_python to handle invalid accessor field

* manufacturer & default_platform should be CSVModelChoiceFields

* Fix string translation

---------

Co-authored-by: Jeremy Stretch <jstretch@netboxlabs.com>
This commit is contained in:
bctiemann 2024-09-26 15:31:07 -04:00 committed by GitHub
parent 0ec632e548
commit 52a0b454c0
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 6 additions and 2 deletions

View File

@ -373,7 +373,7 @@ class DeviceTypeImportForm(NetBoxModelImportForm):
to_field_name='name', to_field_name='name',
help_text=_('The manufacturer which produces this device type') help_text=_('The manufacturer which produces this device type')
) )
default_platform = forms.ModelChoiceField( default_platform = CSVModelChoiceField(
label=_('Default platform'), label=_('Default platform'),
queryset=Platform.objects.all(), queryset=Platform.objects.all(),
to_field_name='name', to_field_name='name',

View File

@ -1,7 +1,7 @@
from django import forms from django import forms
from django.utils.translation import gettext_lazy as _ from django.utils.translation import gettext_lazy as _
from django.contrib.contenttypes.models import ContentType from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist from django.core.exceptions import MultipleObjectsReturned, ObjectDoesNotExist, FieldError
from django.db.models import Q from django.db.models import Q
from utilities.choices import unpack_grouped_choices from utilities.choices import unpack_grouped_choices
@ -64,6 +64,10 @@ class CSVModelChoiceField(forms.ModelChoiceField):
raise forms.ValidationError( raise forms.ValidationError(
_('"{value}" is not a unique value for this field; multiple objects were found').format(value=value) _('"{value}" is not a unique value for this field; multiple objects were found').format(value=value)
) )
except FieldError:
raise forms.ValidationError(
_('"{field_name}" is an invalid accessor field name.').format(field_name=self.to_field_name)
)
class CSVModelMultipleChoiceField(forms.ModelMultipleChoiceField): class CSVModelMultipleChoiceField(forms.ModelMultipleChoiceField):