Răsfoiți Sursa

Cache custom fields on instance prior to calling create()/update()

Jeremy Stretch 5 ani în urmă
părinte
comite
bc04543b33

+ 5 - 4
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

+ 4 - 1
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