def update_field(self, elements):
        """
        Update the field with a list of provided values but only if the values
        are different. Return a boolean indicating whether a change was made
        indicating whether `save` should be called. If the field is currently
        set to any or none, then no comparison is made and field is updated.
        
        :param list elements: list of elements in href or Element format
            to compare to existing field
        :rtype: bool
        """
        changed = False
        if isinstance(elements, list):
            if self.is_any or self.is_none:
                self.add_many(elements)
                changed = True
            else:
                _elements = element_resolver(elements, do_raise=False)
                if set(self.all_as_href()) ^ set(_elements):
                    self.data[self.typeof] = _elements
                    changed = True
        
        if changed and self.rule and (isinstance(self, (Source, Destination)) and \
            self.rule.typeof in ('fw_ipv4_nat_rule', 'fw_ipv6_nat_rule')):
            # Modify NAT cell if necessary
            self.rule._update_nat_field(self)
            
        return changed
Update the field with a list of provided values but only if the values
        are different. Return a boolean indicating whether a change was made
        indicating whether `save` should be called. If the field is currently
        set to any or none, then no comparison is made and field is updated.
        
        :param list elements: list of elements in href or Element format
            to compare to existing field
        :rtype: bool