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

13757 Fix ConfigContext reference to DeviceType (#13804)

* 13757 do prefetch to work around Django issue with vars in init (DeviceType)

* 13757 use self.__dict to access vars in init

* 13757 change test
Arthur Hanson 2 лет назад
Родитель
Сommit
8e251ac33c

+ 2 - 2
netbox/dcim/models/cables.py

@@ -98,10 +98,10 @@ class Cable(PrimaryModel):
         super().__init__(*args, **kwargs)
 
         # A copy of the PK to be used by __str__ in case the object is deleted
-        self._pk = self.pk
+        self._pk = self.__dict__.get('id')
 
         # Cache the original status so we can check later if it's been changed
-        self._orig_status = self.status
+        self._orig_status = self.__dict__.get('status')
 
         self._terminations_modified = False
 

+ 1 - 1
netbox/dcim/models/device_component_templates.py

@@ -89,7 +89,7 @@ class ComponentTemplateModel(ChangeLoggedModel, TrackingModelMixin):
         super().__init__(*args, **kwargs)
 
         # Cache the original DeviceType ID for reference under clean()
-        self._original_device_type = self.device_type_id
+        self._original_device_type = self.__dict__.get('device_type_id')
 
     def to_objectchange(self, action):
         objectchange = super().to_objectchange(action)

+ 1 - 1
netbox/dcim/models/device_components.py

@@ -86,7 +86,7 @@ class ComponentModel(NetBoxModel):
         super().__init__(*args, **kwargs)
 
         # Cache the original Device ID for reference under clean()
-        self._original_device = self.device_id
+        self._original_device = self.__dict__.get('device_id')
 
     def __str__(self):
         if self.label:

+ 3 - 3
netbox/dcim/models/devices.py

@@ -205,11 +205,11 @@ class DeviceType(ImageAttachmentsMixin, PrimaryModel, WeightMixin):
         super().__init__(*args, **kwargs)
 
         # Save a copy of u_height for validation in clean()
-        self._original_u_height = self.u_height
+        self._original_u_height = self.__dict__.get('u_height')
 
         # Save references to the original front/rear images
-        self._original_front_image = self.front_image
-        self._original_rear_image = self.rear_image
+        self._original_front_image = self.__dict__.get('front_image')
+        self._original_rear_image = self.__dict__.get('rear_image')
 
     def get_absolute_url(self):
         return reverse('dcim:devicetype', args=[self.pk])

+ 1 - 1
netbox/extras/models/customfields.py

@@ -219,7 +219,7 @@ class CustomField(CloningMixin, ExportTemplatesMixin, ChangeLoggedModel):
         super().__init__(*args, **kwargs)
 
         # Cache instance's original name so we can check later whether it has changed
-        self._name = self.name
+        self._name = self.__dict__.get('name')
 
     @property
     def search_type(self):

+ 6 - 4
netbox/extras/tests/test_views.py

@@ -6,7 +6,7 @@ from django.contrib.auth import get_user_model
 from django.contrib.contenttypes.models import ContentType
 from django.urls import reverse
 
-from dcim.models import Site
+from dcim.models import DeviceType, Manufacturer, Site
 from extras.choices import *
 from extras.models import *
 from utilities.testing import ViewTestCases, TestCase
@@ -434,7 +434,8 @@ class ConfigContextTestCase(
     @classmethod
     def setUpTestData(cls):
 
-        site = Site.objects.create(name='Site 1', slug='site-1')
+        manufacturer = Manufacturer.objects.create(name='Manufacturer 1', slug='manufacturer-1')
+        devicetype = DeviceType.objects.create(manufacturer=manufacturer, model='Device Type 1', slug='device-type-1')
 
         # Create three ConfigContexts
         for i in range(1, 4):
@@ -443,7 +444,7 @@ class ConfigContextTestCase(
                 data={'foo': i}
             )
             configcontext.save()
-            configcontext.sites.add(site)
+            configcontext.device_types.add(devicetype)
 
         cls.form_data = {
             'name': 'Config Context X',
@@ -451,11 +452,12 @@ class ConfigContextTestCase(
             'description': 'A new config context',
             'is_active': True,
             'regions': [],
-            'sites': [site.pk],
+            'sites': [],
             'roles': [],
             'platforms': [],
             'tenant_groups': [],
             'tenants': [],
+            'device_types': [devicetype.id,],
             'tags': [],
             'data': '{"foo": 123}',
         }

+ 2 - 2
netbox/ipam/models/ip.py

@@ -290,8 +290,8 @@ class Prefix(GetAvailablePrefixesMixin, PrimaryModel):
         super().__init__(*args, **kwargs)
 
         # Cache the original prefix and VRF so we can check if they have changed on post_save
-        self._prefix = self.prefix
-        self._vrf_id = self.vrf_id
+        self._prefix = self.__dict__.get('prefix')
+        self._vrf_id = self.__dict__.get('vrf_id')
 
     def __str__(self):
         return str(self.prefix)