from django.contrib.auth.models import AbstractUser from django.db import models from django.conf import settings from django.utils.translation import gettext_lazy as _ from django.core.validators import MaxValueValidator class Book(models.Model): PLAN_TO_READ = 'PLAN' READING = 'READING' COMPLETED = 'COMPLETED' DROPPED = 'DROPPED' STATE_CHOICES = [ (PLAN_TO_READ, _('Plan to Read')), (READING, _('Reading')), (COMPLETED, _('Completed')), (DROPPED, _('Dropped')), ] user = models.ForeignKey( settings.AUTH_USER_MODEL, on_delete=models.CASCADE, related_name='books' ) note = models.PositiveSmallIntegerField( _('note'), validators=[MaxValueValidator(10)], default=0, null=True, blank=True ) title = models.CharField(max_length=255) author = models.CharField(max_length=255) state = models.CharField( _('state'), max_length=10, choices=STATE_CHOICES, default=PLAN_TO_READ, db_index=True ) added_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f"{self.title} ({self.user.username})" class CustomUser(AbstractUser): def __str__(self): return self.username