from django.db import models from django.utils.text import slugify from django.contrib.auth.models import User class Product(models.Model): name = models.CharField(max_length=255) description = models.TextField() price = models.PositiveIntegerField(default=0) image = models.ImageField(upload_to='product_images/') rating = models.PositiveIntegerField(default=0) view = models.IntegerField(default=0, verbose_name='بازدید') sell = models.IntegerField(default=0, verbose_name='فروش') in_stock = models.IntegerField(default=0, verbose_name="تعداد موجود") discount = models.SmallIntegerField(default=0, verbose_name='تخفیف') slug = models.SlugField(max_length=50, unique=True, blank=True, null=True, allow_unicode=True, verbose_name='نام یکتا', help_text="این فیلد را خالی بگذارید") link_of_metas = models.CharField(max_length=400, verbose_name='لینک استخراج متا', null=True, blank=True) meta_description = models.CharField(max_length=300, blank=True, null=True, help_text='این فیلد را حتما پر کنید') meta_keywords = models.CharField(max_length=300, blank=True, null=True, help_text='این فیلد را حتما پر کنید') meta_rating = models.FloatField(default=5, help_text='امتیاز محصول') def format_discount_price(self): discount_price = int(self.price * (100 - self.discount) / 100) formatted_num = "{:,.0f}".format(discount_price) return formatted_num def discount_price(self): discount_price = int(self.price * (100 - self.discount) / 100) return discount_price def format_price(self): price = self.price formatted_num = "{:,.0f}".format(price) return formatted_num def __str__(self): return self.name def save(self, *args, **kwargs): if not self.slug: self.slug = slugify(self.name, allow_unicode=True) super().save(*args, **kwargs) class CommentModel(models.Model): product = models.ForeignKey(Product, on_delete=models.CASCADE, related_name='comments', verbose_name='محصول') content = models.TextField(verbose_name='محتوای نظر') user = models.ForeignKey(User, on_delete=models.CASCADE) timestamp = models.DateTimeField(auto_now_add=True, verbose_name='زمان ثبت کامنت') show = models.BooleanField(default=True, verbose_name='نشان دادن کامنت') class Meta: verbose_name = 'نظر' verbose_name_plural = 'نظرات' def __str__(self): return f"{self.user}-{self.content[:30]}"