code: def value(self):
          
          if not self._value:
              return None
          if not self._cached_values and isinstance(self._value, (list, tuple)):
              ids = [v.get('id') for v in self._value]
              self._cached_values = list(self._client.parts(id__in=','.join(ids), category=None))
          return self._cached_values
docs: Value of a reference property.
  
          You can set the reference with a Part, Part id or None value.
          Ensure that the model of the provided part, matches the configured model
  
          :return: a :class:`Part` or None
          :raises APIError: When unable to find the associated :class:`Part`
  
          Example
          -------
          Get the wheel reference property
  
          >>> part = project.part('Bike')
          >>> wheels_ref_property = part.property('Wheels')
          >>> isinstance(wheels_ref_property, MultiReferenceProperty)
          True
  
          The value returns a list of Parts or is an empty list
  
          >>> type(wheels_ref_property.value) in (list, tuple)
          True
  
          Get the selection of wheel instances:
  
          >>> wheel_choices = wheels_ref_property.choices()
  
          Choose random wheel from the wheel_choices:
  
          >>> from random import choice
          >>> wheel_choice_1 = choice(wheel_choices)
          >>> wheel_choice_2 = choice(wheel_choices)
  
          Set chosen wheel
          1: provide a single wheel:
  
          >>> wheels_ref_property.value = [wheel_choice_1]
  
          2: provide multiple wheels:
  
          >>> wheels_ref_property.value = [wheel_choice_1, wheel_choice_2]