Coverage for books/models.py: 100.00%
32 statements
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-24 18:34 -0700
« prev ^ index » next coverage.py v7.11.0, created at 2025-10-24 18:34 -0700
1import uuid
3from django.contrib.auth import get_user_model
4from django.db import models
5from django.urls import reverse
8class Book(models.Model):
9 id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
10 title = models.CharField(max_length=200)
11 author = models.CharField(max_length=200)
12 price = models.DecimalField(max_digits=6, decimal_places=2)
13 publisher = models.CharField(max_length=50, blank=True)
14 pubdate = models.DateField(null=True, blank=True, help_text="Date of Publication")
15 description = models.TextField(
16 max_length=1000,
17 blank=True,
18 help_text="Enter a brief description of the book.",
19 )
20 cover = models.ImageField(upload_to="covers/", blank=True)
21 creator = models.ForeignKey(get_user_model(), null=True, on_delete=models.SET_NULL)
23 objects = models.Manager()
25 class Meta:
26 indexes = [
27 models.Index(fields=["id"], name="id_index"),
28 ]
29 ordering = ["title"]
30 permissions = [
31 ("special_status", "Can read all books"),
32 ]
34 def __str__(self):
35 return self.title 1b
37 def get_absolute_url(self):
38 return reverse("book_detail", args=[str(self.id)]) 1cdef
41class Review(models.Model):
42 book = models.ForeignKey(
43 Book,
44 on_delete=models.CASCADE,
45 related_name="reviews",
46 )
47 review = models.TextField("Review", blank=True)
48 date = models.DateTimeField(auto_now_add=True)
49 creator = models.ForeignKey(
50 get_user_model(),
51 on_delete=models.CASCADE,
52 )
54 def __str__(self):
55 return self.review 1g
57 def get_absolute_url(self):
58 return reverse("book_list") 1h