You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

abstract_models.py 3.1KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. from decimal import Decimal
  2. from django.db import models
  3. from django.utils.translation import ugettext as _
  4. class AbstractProductRecord(models.Model):
  5. """
  6. A record of a how popular a product is.
  7. This used be auto-merchandising to display the most popular
  8. products.
  9. """
  10. product = models.OneToOneField(
  11. 'catalogue.Product', verbose_name=_("Product"),
  12. related_name='stats')
  13. # Data used for generating a score
  14. num_views = models.PositiveIntegerField(_('Views'), default=0)
  15. num_basket_additions = models.PositiveIntegerField(
  16. _('Basket Additions'), default=0)
  17. num_purchases = models.PositiveIntegerField(
  18. _('Purchases'), default=0, db_index=True)
  19. # Product score - used within search
  20. score = models.FloatField(_('Score'), default=0.00)
  21. class Meta:
  22. abstract = True
  23. ordering = ['-num_purchases']
  24. verbose_name = _('Product record')
  25. verbose_name_plural = _('Product records')
  26. def __unicode__(self):
  27. return _("Record for '%s'") % self.product
  28. class AbstractUserRecord(models.Model):
  29. """
  30. A record of a user's activity.
  31. """
  32. user = models.OneToOneField('auth.User', verbose_name=_("User"))
  33. # Browsing stats
  34. num_product_views = models.PositiveIntegerField(
  35. _('Product Views'), default=0)
  36. num_basket_additions = models.PositiveIntegerField(
  37. _('Basket Additions'), default=0)
  38. # Order stats
  39. num_orders = models.PositiveIntegerField(
  40. _('Orders'), default=0, db_index=True)
  41. num_order_lines = models.PositiveIntegerField(
  42. _('Order Lines'), default=0, db_index=True)
  43. num_order_items = models.PositiveIntegerField(
  44. _('Order Items'), default=0, db_index=True)
  45. total_spent = models.DecimalField(_('Total Spent'), decimal_places=2,
  46. max_digits=12, default=Decimal('0.00'))
  47. date_last_order = models.DateTimeField(
  48. _('Last Order Date'), blank=True, null=True)
  49. class Meta:
  50. abstract = True
  51. verbose_name = _('User Record')
  52. verbose_name_plural = _('User Records')
  53. class AbstractUserProductView(models.Model):
  54. user = models.ForeignKey('auth.User', verbose_name=_("User"))
  55. product = models.ForeignKey('catalogue.Product', verbose_name=_("Product"))
  56. date_created = models.DateTimeField(_("Date Created"), auto_now_add=True)
  57. class Meta:
  58. abstract = True
  59. verbose_name = _('Basket')
  60. verbose_name_plural = _('Baskets')
  61. def __unicode__(self):
  62. return _("%(user)s viewed '%(product)s'") % {
  63. 'user': self.user, 'product': self.product}
  64. class AbstractUserSearch(models.Model):
  65. user = models.ForeignKey('auth.User', verbose_name=_("User"))
  66. query = models.CharField(_("Search term"), max_length=255, db_index=True)
  67. date_created = models.DateTimeField(_("Date Created"), auto_now_add=True)
  68. class Meta:
  69. abstract = True
  70. verbose_name_plural = _("User search queries")
  71. def __unicode__(self):
  72. return _("%(user)s searched for '%(query)s'") % {
  73. 'user': self.user,
  74. 'query': self.query}