Просмотр исходного кода

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>
bctiemann 1 год назад
Родитель
Сommit
52a0b454c0
2 измененных файлов с 6 добавлено и 2 удалено
  1. 1 1
      netbox/dcim/forms/bulk_import.py
  2. 5 1
      netbox/utilities/forms/fields/csv.py

+ 1 - 1
netbox/dcim/forms/bulk_import.py

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

+ 5 - 1
netbox/utilities/forms/fields/csv.py

@@ -1,7 +1,7 @@
 from django import forms
 from django.utils.translation import gettext_lazy as _
 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 utilities.choices import unpack_grouped_choices
@@ -64,6 +64,10 @@ class CSVModelChoiceField(forms.ModelChoiceField):
             raise forms.ValidationError(
                 _('"{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):