text: from django.db import models
  from django.urls import reverse
  
  
  COLOR_CHOICES = (
      ('P', 'primary'),
      ('S', 'secondary'),
      ('D', 'danger')
  )
  
  LABEL_CHOICES = (
      ('N', 'New'),
      ('B', 'Bestseller'),
      ('E', '')
  )
  
  
  class Category(models.Model):
      name = models.CharField(max_length=200, db_index=True)
      slug = models.SlugField(max_length=200, unique=True)
  
      class Meta:
          ordering = ('name',)
          verbose_name = 'category'
          verbose_name_plural = 'categories'
  
      def __str__(self):
          return self.name
  
      def get_absolute_url(self):
          return reverse('shop:product_list_by_category', args=[self.slug])
  
  
  class Product(models.Model):
      category = models.ForeignKey(Category, related_name='products', on_delete=models.CASCADE)
      label = models.CharField(choices=LABEL_CHOICES, max_length=1, default='P')
      color = models.CharField(choices=COLOR_CHOICES, max_length=1, default='E')
      name = models.CharField(max_length=200, db_index=True)
      slug = models.SlugField(max_length=200, db_index=True)
      image = models.ImageField(upload_to='products/%Y/%m/%d', blank=True)
      description = models.TextField(blank=True)
      price = models.DecimalField(max_digits=10, decimal_places=2)
      available = models.BooleanField(default=True)
      created = models.DateTimeField(auto_now_add=True)
      updated = models.DateTimeField(auto_now=True)
  
      class Meta:
          ordering = ('name',)
          index_together = (('id', 'slug'),)
  
      def __str__(self):
          return self.name
  
      def get_absolute_url(self):
          return reverse('shop:product_detail', args=[self.id, self.slug])
  