diff --git a/linode_api4/objects/base.py b/linode_api4/objects/base.py index 26859087..be72a395 100644 --- a/linode_api4/objects/base.py +++ b/linode_api4/objects/base.py @@ -210,9 +210,26 @@ def save(self, force=True) -> bool: if not force and not self._changed: return False - resp = self._client.put( - type(self).api_endpoint, model=self, data=self._serialize() - ) + data = None + if not self._populated: + data = { + a: object.__getattribute__(self, a) + for a in type(self).properties + if type(self).properties[a].mutable + and object.__getattribute__(self, a) is not None + } + + for key, value in data.items(): + if ( + isinstance(value, ExplicitNullValue) + or value == ExplicitNullValue + ): + data[key] = None + + else: + data = self._serialize() + + resp = self._client.put(type(self).api_endpoint, model=self, data=data) if "error" in resp: return False