File tree Expand file tree Collapse file tree
openwisp_controller/config Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -339,8 +339,9 @@ def _get_initial_values_for_checked_fields(self):
339339 return
340340 self .refresh_from_db (fields = present_values .keys ())
341341 for field in self ._changed_checked_fields :
342- setattr (self , f"_initial_{ field } " , field )
343- setattr (self , field , present_values [field ])
342+ if field in present_values :
343+ setattr (self , f"_initial_{ field } " , getattr (self , field ))
344+ setattr (self , field , present_values [field ])
344345
345346 def _check_name_changed (self ):
346347 if self ._initial_name == models .DEFERRED :
Original file line number Diff line number Diff line change @@ -541,6 +541,21 @@ def test_changed_checked_fields_no_duplicates(self):
541541 device .__init__ ()
542542 self .assertEqual (device ._changed_checked_fields .count ("last_ip" ), 1 )
543543
544+ def test_deferred_fields_populated_correctly (self ):
545+ device = self ._create_device (
546+ name = "deferred-test" ,
547+ last_ip = "172.16.0.1" ,
548+ management_ip = "10.0.0.1" ,
549+ )
550+ # Load the instance with deferred fields omitted
551+ device = Device .objects .only ("id" ).get (pk = device .pk )
552+ device .last_ip = "172.16.1.1"
553+ # Populate initial values for checked fields
554+ device ._check_changed_fields ()
555+ # Ensure `_initial_<field>` contains the actual value, not the field name
556+ self .assertEqual (getattr (device , "_initial_last_ip" ), "172.16.0.1" )
557+ self .assertNotEqual (getattr (device , "_initial_last_ip" ), "last_ip" )
558+
544559 def test_exceed_organization_device_limit (self ):
545560 org = self ._get_org ()
546561 org .config_limits .device_limit = 1
You can’t perform that action at this time.
0 commit comments