Coverage for books/models.py: 100.00%

33 statements  

« prev     ^ index     » next       coverage.py v7.17.0, created at 2026-10-23 15:55 -0700

1import uuid 1a

2from typing import ClassVar 1a

3 

4from django.contrib.auth import get_user_model 1a

5from django.db import models 1a

6from django.urls import reverse 1a

7 

8 

9class Book(models.Model): 1a

10 id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) 1a

11 title = models.CharField(max_length=200) 1a

12 author = models.CharField(max_length=200) 1a

13 price = models.DecimalField(max_digits=6, decimal_places=2) 1a

14 publisher = models.CharField(max_length=50, blank=True) 1a

15 pubdate = models.DateField(null=True, blank=True, help_text="Date of Publication") 1a

16 description = models.TextField( 1a

17 max_length=1000, 

18 blank=True, 

19 help_text="Enter a brief description of the book.", 

20 ) 

21 cover = models.ImageField(upload_to="covers/", blank=True) 1a

22 creator = models.ForeignKey(get_user_model(), null=True, on_delete=models.SET_NULL) 1a

23 

24 objects = models.Manager() 1a

25 

26 class Meta: 1a

27 indexes: ClassVar[list] = [ 1a

28 models.Index(fields=["id"], name="id_index"), 

29 ] 

30 ordering: ClassVar[list[str]] = ["title"] 1a

31 permissions: ClassVar[list[tuple]] = [ 1a

32 ("special_status", "Can read all books"), 

33 ] 

34 

35 def __str__(self): 1a

36 return self.title 1a

37 

38 def get_absolute_url(self): 1a

39 return reverse("book_detail", args=[str(self.id)]) 1a

40 

41 

42class Review(models.Model): 1a

43 book = models.ForeignKey( 1a

44 Book, 

45 on_delete=models.CASCADE, 

46 related_name="reviews", 

47 ) 

48 review = models.TextField("Review", blank=True) 1a

49 date = models.DateTimeField(auto_now_add=True) 1a

50 creator = models.ForeignKey( 1a

51 get_user_model(), 

52 on_delete=models.CASCADE, 

53 ) 

54 

55 def __str__(self): 1a

56 return self.review 1a

57 

58 def get_absolute_url(self): 1a

59 return reverse("book_list") 1a