search.py 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. import uuid
  2. from django.contrib.contenttypes.models import ContentType
  3. from django.db import models
  4. from django.utils.translation import gettext_lazy as _
  5. from utilities.fields import RestrictedGenericForeignKey
  6. from ..fields import CachedValueField
  7. __all__ = (
  8. 'CachedValue',
  9. )
  10. class CachedValue(models.Model):
  11. id = models.UUIDField(
  12. primary_key=True,
  13. default=uuid.uuid4,
  14. editable=False
  15. )
  16. timestamp = models.DateTimeField(
  17. verbose_name=_('timestamp'),
  18. auto_now_add=True,
  19. editable=False
  20. )
  21. object_type = models.ForeignKey(
  22. to=ContentType,
  23. on_delete=models.CASCADE,
  24. related_name='+'
  25. )
  26. object_id = models.PositiveBigIntegerField()
  27. object = RestrictedGenericForeignKey(
  28. ct_field='object_type',
  29. fk_field='object_id'
  30. )
  31. field = models.CharField(
  32. verbose_name=_('field'),
  33. max_length=200
  34. )
  35. type = models.CharField(
  36. verbose_name=_('type'),
  37. max_length=30
  38. )
  39. value = CachedValueField(
  40. verbose_name=_('value'),
  41. )
  42. weight = models.PositiveSmallIntegerField(
  43. verbose_name=_('weight'),
  44. default=1000
  45. )
  46. class Meta:
  47. ordering = ('weight', 'object_type', 'object_id')
  48. verbose_name = _('cached value')
  49. verbose_name_plural = _('cached values')
  50. def __str__(self):
  51. return f'{self.object_type} {self.object_id}: {self.field}={self.value}'