from django.db import models from django.conf import settings from ecommerce.utils import unique_slug_generator from django.db.models.signals import pre_save from django.dispatch import receiver from django.urls import reverse class ProductManager(models.Manager): def get_by_id(self, id): return self.get_queryset().filter(id=id).first() or None class Product(models.Model): title = models.CharField(max_length=120) slug = models.SlugField(blank=True, unique=True) description = models.TextField() price = models.DecimalField(decimal_places=2, max_digits=10, default=0) image = models.ImageField(upload_to='products/', null=True, blank=True) time = models.DateTimeField(auto_now_add=True) objects = ProductManager() def get_absolute_url(self): return reverse("products:details", kwargs={'slug': self.slug}) # return "/{slug}/".format(slug=self.slug) def __str__(self): return self.title def image_tag(self): if self.image: return ''.format(self.image.url) return 'No file' image_tag.short_description = 'Image_preview' image_tag.allow_tags = True @receiver(pre_save, sender=Product) def product_save(sender, instance, **kwargs): if not instance.slug: instance.slug = unique_slug_generator(instance)