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

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  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. # Data used for generating a score
  13. num_views = models.PositiveIntegerField(_('Views'), default=0)
  14. num_basket_additions = models.PositiveIntegerField(
  15. _('Basket Additions'), default=0)
  16. num_purchases = models.PositiveIntegerField(
  17. _('Purchaes'), default=0, db_index=True)
  18. # Product score - used within search
  19. score = models.FloatField(_('Score'), default=0.00)
  20. class Meta:
  21. abstract = True
  22. ordering = ['-num_purchases']
  23. verbose_name = _('Product record')
  24. verbose_name_plural = _('Product records')
  25. def __unicode__(self):
  26. return _("Record for '%s'") % self.product
  27. class AbstractUserRecord(models.Model):
  28. """
  29. A record of a user's activity.
  30. """
  31. user = models.OneToOneField('auth.User', verbose_name=_("User"))
  32. # Browsing stats
  33. num_product_views = models.PositiveIntegerField(
  34. _('Product Views'), default=0)
  35. num_basket_additions = models.PositiveIntegerField(
  36. _('Basket Additions'), default=0)
  37. # Order stats
  38. num_orders = models.PositiveIntegerField(
  39. _('Orders'), default=0, db_index=True)
  40. num_order_lines = models.PositiveIntegerField(
  41. _('Order Lines'), default=0, db_index=True)
  42. num_order_items = models.PositiveIntegerField(
  43. _('Order Items'), default=0, db_index=True)
  44. total_spent = models.DecimalField(_('Total Spent'), decimal_places=2,
  45. max_digits=12, default=Decimal('0.00'))
  46. date_last_order = models.DateTimeField(
  47. _('Last Order Date'), blank=True, null=True)
  48. class Meta:
  49. abstract = True
  50. verbose_name = _('User Record')
  51. verbose_name_plural = _('User Records')
  52. class AbstractUserProductView(models.Model):
  53. user = models.ForeignKey('auth.User', verbose_name=_("User"))
  54. product = models.ForeignKey('catalogue.Product', verbose_name=_("Product"))
  55. date_created = models.DateTimeField(_("Date Created"), auto_now_add=True)
  56. class Meta:
  57. abstract = True
  58. verbose_name = _('Basket')
  59. verbose_name_plural = _('Baskets')
  60. def __unicode__(self):
  61. return _("%(user)s viewed '%(product)s'") % {
  62. 'user': self.user, 'product': self.product}
  63. class AbstractUserSearch(models.Model):
  64. user = models.ForeignKey('auth.User', verbose_name=_("User"))
  65. query = models.CharField(_("Search term"), max_length=255, db_index=True)
  66. date_created = models.DateTimeField(_("Date Created"), auto_now_add=True)
  67. class Meta:
  68. abstract = True
  69. verbose_name_plural = _("User search queries")
  70. def __unicode__(self):
  71. return _("%(user)s searched for '%(query)s'") % {
  72. 'user': self.user,
  73. 'query': self.query}