diff --git a/netbox/extras/api/customfields.py b/netbox/extras/api/customfields.py index 34e865530..75834bb10 100644 --- a/netbox/extras/api/customfields.py +++ b/netbox/extras/api/customfields.py @@ -175,14 +175,14 @@ class CustomFieldModelSerializer(ValidatedModelSerializer): ) def create(self, validated_data): - - custom_fields = validated_data.pop('custom_fields', None) + from django.db.models.query import QuerySet with transaction.atomic(): instance = super().create(validated_data) # Save custom fields + custom_fields = validated_data.get('custom_fields') if custom_fields is not None: self._save_custom_fields(instance, custom_fields) instance.custom_fields = custom_fields @@ -191,10 +191,11 @@ class CustomFieldModelSerializer(ValidatedModelSerializer): def update(self, instance, validated_data): - custom_fields = validated_data.pop('custom_fields', None) - with transaction.atomic(): + custom_fields = validated_data.get('custom_fields') + instance._cf = custom_fields + instance = super().update(instance, validated_data) # Save custom fields diff --git a/netbox/extras/models/customfields.py b/netbox/extras/models/customfields.py index 2671864fb..fd09971b6 100644 --- a/netbox/extras/models/customfields.py +++ b/netbox/extras/models/customfields.py @@ -17,11 +17,14 @@ from extras.utils import FeatureQuery # class CustomFieldModel(models.Model): - _cf = None class Meta: abstract = True + def __init__(self, *args, custom_fields=None, **kwargs): + self._cf = custom_fields + super().__init__(*args, **kwargs) + def cache_custom_fields(self): """ Cache all custom field values for this instance