content: import uuid
  
  from django.db import models
  from django.utils.translation import gettext_lazy as _
  
  from netbox.search.utils import get_indexer
  from utilities.fields import RestrictedGenericForeignKey
  from ..fields import CachedValueField
  
  __all__ = (
      'CachedValue',
  )
  
  
  class CachedValue(models.Model):
      id = models.UUIDField(
          primary_key=True,
          default=uuid.uuid4,
          editable=False
      )
      timestamp = models.DateTimeField(
          verbose_name=_('timestamp'),
          auto_now_add=True,
          editable=False
      )
      object_type = models.ForeignKey(
          to='contenttypes.ContentType',
          on_delete=models.CASCADE,
          related_name='+'
      )
      object_id = models.PositiveBigIntegerField()
      object = RestrictedGenericForeignKey(
          ct_field='object_type',
          fk_field='object_id'
      )
      field = models.CharField(
          verbose_name=_('field'),
          max_length=200
      )
      type = models.CharField(
          verbose_name=_('type'),
          max_length=30
      )
      value = CachedValueField(
          verbose_name=_('value'),
      )
      weight = models.PositiveSmallIntegerField(
          verbose_name=_('weight'),
          default=1000
      )
  
      _netbox_private = True
  
      class Meta:
          ordering = ('weight', 'object_type', 'value', 'object_id')
          verbose_name = _('cached value')
          verbose_name_plural = _('cached values')
          indexes = (
              models.Index(fields=('object_type', 'object_id'), name='extras_cachedvalue_object'),
          )
  
      def __str__(self):
          return f'{self.object_type} {self.object_id}: {self.field}={self.value}'
  
      @property
      def display_attrs(self):
          """
          Render any display attributes associated with this search result.
          """
          indexer = get_indexer(self.object_type)
          attrs = {}
          for attr in indexer.display_attrs:
              name = self.object._meta.get_field(attr).verbose_name
              if value := getattr(self.object, attr):
                  if display_func := getattr(self.object, f'get_{attr}_display', None):
                      attrs[name] = display_func()
                  else:
                      attrs[name] = value
          return attrs
  