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.4KB

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