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