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 2.9KB

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