From bc04543b33d699e2c41a8772bbdb74709f9329d6 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Mon, 17 Aug 2020 12:22:37 -0400 Subject: [PATCH] Cache custom fields on instance prior to calling create()/update() --- netbox/extras/api/customfields.py | 9 +++++---- netbox/extras/models/customfields.py | 5 ++++- 2 files changed, 9 insertions(+), 5 deletions(-) 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