from django.db import models from django.urls import reverse from localmodels import HTMLField # Create your models here. class BaseTag(models.Model): tag = models.CharField(max_length=100, unique=True) def __unicode__(self): return self.tag class Meta(object): abstract = True class AuthorTag(BaseTag): pass class WorkTag(BaseTag): pass class QuoteTag(BaseTag): def get_absolute_url(self): return reverse('quotes:tags', args=[str(self.id)]) class CommonData(models.Model): creation_date = models.DateTimeField(auto_now_add=True) last_modification = models.DateTimeField(auto_now=True) notes = HTMLField(blank=True, help_text= \ "Notes about the entry; may be left blank. Displayed \ on the public pages") pvt_notes = HTMLField(blank=True, help_text= \ "Notes about the entry; not displayed on \ the public interface") nb_display = models.BigIntegerField(default=0) def incr_display(self): self.nb_display = models.F('nb_display') + 1 self.save() class Meta(object): abstract = True class Author(CommonData): name = models.CharField(max_length=100, help_text="Name of the author", unique=True) tags = models.ManyToManyField(AuthorTag, blank=True, help_text='Not implemented yet') birth_date = models.DateField(blank=True, null=True, help_text="Date of birth") death_date = models.DateField(blank=True, null=True, help_text="Date of death (leave blank \ if still alive!)") class Meta(CommonData.Meta): ordering = ['name'] def __unicode__(self): return self.name def get_absolute_url(self): return reverse('quotes:author', args=[str(self.id)]) # class DatePrecision(models.CharField): # DAY = "D" # MONTH = "M" # YEAR = "Y" # DECADE = "X" # CENTURY = "C" # UNKNOWN = "?" # PRECISION_CHOICES = [ # (DAY, "Day"), # (MONTH, "Month"), # (YEAR, "Year"), # (DECADE, "Decade"), # (CENTURY, "Century"), # (UNKNOWN, "Unknown"), # ] # def __init__(self, **kwargs): # models.CharField(max_length=1, choices=self.PRECISION_CHOICES, # default=self.DAY, **kwargs) class Work(CommonData): name = models.CharField(max_length=100, help_text="Name of the context for the quote \ (title of the work or speech it appears in)", unique=True) author = models.ForeignKey(Author) date = models.DateField(blank=True, null=True, help_text="Date of the quote") tags = models.ManyToManyField(WorkTag, blank=True, help_text='Not implemented yet') def __unicode__(self): return "%s: %s (%s)" % (self.author.name, self.name, self.date) def get_absolute_url(self): return reverse('quotes:work', args=[str(self.id)]) class Meta(CommonData.Meta): ordering = ['name'] class Quote(CommonData): text = HTMLField() tags = models.ManyToManyField(QuoteTag, blank=True) work = models.ForeignKey(Work) def __unicode__(self): return self.work.author.name + ": " + self.text def get_absolute_url(self): return reverse('quotes:onequote', args=[str(self.id)]) class Meta(CommonData.Meta): ordering = ['-pk']