Coverage for shop/models.py: 87.10%
31 statements
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-02 20:31 -0700
« prev ^ index » next coverage.py v7.8.0, created at 2025-05-02 20:31 -0700
1from django.db import models
2from django.urls import reverse
5class Category(models.Model):
6 name = models.CharField(max_length=200)
7 slug = models.SlugField(max_length=200, unique=True)
9 class Meta:
10 ordering = ["name"]
11 indexes = [
12 models.Index(fields=["name"]),
13 ]
14 verbose_name = "category"
15 verbose_name_plural = "categories"
17 def __str__(self):
18 return self.name
20 def get_absolute_url(self):
21 return reverse("shop:product_list_by_category", args=[self.slug])
24class Product(models.Model):
25 category = models.ForeignKey(
26 Category, related_name="products", on_delete=models.CASCADE
27 )
28 name = models.CharField(max_length=200)
29 slug = models.SlugField(max_length=200)
30 image = models.ImageField(upload_to="products/%Y/%m/%d", blank=True)
31 description = models.TextField(blank=True)
32 price = models.DecimalField(max_digits=10, decimal_places=2)
33 available = models.BooleanField(default=True)
34 created = models.DateTimeField(auto_now_add=True)
35 updated = models.DateTimeField(auto_now=True)
37 class Meta:
38 ordering = ["name"]
39 indexes = [
40 models.Index(fields=["id", "slug"]),
41 models.Index(fields=["name"]),
42 models.Index(fields=["-created"]),
43 ]
45 def __str__(self):
46 return self.name
48 def get_absolute_url(self):
49 return reverse("shop:product_detail", args=[self.id, self.slug])