1. from django.db import models
    
  2. from django.db.models import QuerySet
    
  3. from django.db.models.manager import BaseManager
    
  4. from django.urls import reverse
    
  5. 
    
  6. 
    
  7. class Artist(models.Model):
    
  8.     name = models.CharField(max_length=100)
    
  9. 
    
  10.     class Meta:
    
  11.         ordering = ["name"]
    
  12.         verbose_name = "professional artist"
    
  13.         verbose_name_plural = "professional artists"
    
  14. 
    
  15.     def __str__(self):
    
  16.         return self.name
    
  17. 
    
  18.     def get_absolute_url(self):
    
  19.         return reverse("artist_detail", kwargs={"pk": self.id})
    
  20. 
    
  21. 
    
  22. class Author(models.Model):
    
  23.     name = models.CharField(max_length=100)
    
  24.     slug = models.SlugField()
    
  25. 
    
  26.     class Meta:
    
  27.         ordering = ["name"]
    
  28. 
    
  29.     def __str__(self):
    
  30.         return self.name
    
  31. 
    
  32. 
    
  33. class DoesNotExistQuerySet(QuerySet):
    
  34.     def get(self, *args, **kwargs):
    
  35.         raise Author.DoesNotExist
    
  36. 
    
  37. 
    
  38. DoesNotExistBookManager = BaseManager.from_queryset(DoesNotExistQuerySet)
    
  39. 
    
  40. 
    
  41. class Book(models.Model):
    
  42.     name = models.CharField(max_length=255)
    
  43.     slug = models.SlugField()
    
  44.     pages = models.IntegerField()
    
  45.     authors = models.ManyToManyField(Author)
    
  46.     pubdate = models.DateField()
    
  47. 
    
  48.     objects = models.Manager()
    
  49.     does_not_exist = DoesNotExistBookManager()
    
  50. 
    
  51.     class Meta:
    
  52.         ordering = ["-pubdate"]
    
  53. 
    
  54.     def __str__(self):
    
  55.         return self.name
    
  56. 
    
  57. 
    
  58. class Page(models.Model):
    
  59.     content = models.TextField()
    
  60.     template = models.CharField(max_length=255)
    
  61. 
    
  62. 
    
  63. class BookSigning(models.Model):
    
  64.     event_date = models.DateTimeField()