X-Git-Url: https://git.mdrn.pl/redakcja.git/blobdiff_plain/0251adf97488c11e936a714976261febfb8c5268..702fb2526face0e696facae2fe725495bfad1274:/src/catalogue/models.py?ds=inline diff --git a/src/catalogue/models.py b/src/catalogue/models.py index b974de14..97454775 100644 --- a/src/catalogue/models.py +++ b/src/catalogue/models.py @@ -2,18 +2,24 @@ from collections import Counter import decimal from django.apps import apps from django.db import models +from django.template.loader import render_to_string from django.urls import reverse from django.utils.translation import gettext_lazy as _ from admin_ordering.models import OrderableModel from wikidata.client import Client from .constants import WIKIDATA from .wikidata import WikidataModel +from .wikimedia import WikiMedia class Author(WikidataModel): slug = models.SlugField(max_length=255, null=True, blank=True, unique=True) first_name = models.CharField(_("first name"), max_length=255, blank=True) last_name = models.CharField(_("last name"), max_length=255, blank=True) + genitive = models.CharField( + 'dopełniacz', max_length=255, blank=True, + help_text='utwory … (czyje?)' + ) name_de = models.CharField(_("name (de)"), max_length=255, blank=True) name_lt = models.CharField(_("name (lt)"), max_length=255, blank=True) @@ -49,11 +55,16 @@ class Author(WikidataModel): (4, _("Unknown")), ], ) - notes = models.TextField(_("notes"), blank=True) + notes = models.TextField(_("notes"), blank=True, help_text=_('private')) + gazeta_link = models.CharField(_("gazeta link"), max_length=255, blank=True) culturepl_link = models.CharField(_("culture.pl link"), max_length=255, blank=True) + plwiki = models.CharField(blank=True, max_length=255) + photo = models.ImageField(blank=True, null=True, upload_to='catalogue/author/') + photo_source = models.CharField(blank=True, max_length=255) + photo_attribution = models.CharField(max_length=255, blank=True) - description = models.TextField(_("description"), blank=True) + description = models.TextField(_("description"), blank=True, help_text=_('for publication')) priority = models.PositiveSmallIntegerField( _("priority"), @@ -76,7 +87,11 @@ class Author(WikidataModel): year_of_death = WIKIDATA.DATE_OF_DEATH place_of_death = WIKIDATA.PLACE_OF_DEATH gender = WIKIDATA.GENDER - notes = "description" + notes = WikiMedia.append("description") + plwiki = "plwiki" + photo = WikiMedia.download(WIKIDATA.IMAGE) + photo_source = WikiMedia.descriptionurl(WIKIDATA.IMAGE) + photo_attribution = WikiMedia.attribution(WIKIDATA.IMAGE) def _supplement(obj): if not obj.first_name and not obj.last_name: @@ -104,6 +119,12 @@ class Author(WikidataModel): else: return None + def generate_description(self): + t = render_to_string( + 'catalogue/author_description.html', + {'obj': self} + ) + return t class NotableBook(OrderableModel): author = models.ForeignKey(Author, models.CASCADE) @@ -120,19 +141,43 @@ class Category(WikidataModel): def __str__(self): return self.name + class Epoch(Category): + adjective_feminine_singular = models.CharField( + 'przymiotnik pojedynczy żeński', max_length=255, blank=True, + help_text='twórczość … Adama Mickiewicza' + ) + adjective_nonmasculine_plural = models.CharField( + 'przymiotnik mnogi niemęskoosobowy', max_length=255, blank=True, + help_text='utwory … Adama Mickiewicza' + ) + class Meta: verbose_name = _('epoch') verbose_name_plural = _('epochs') class Genre(Category): + plural = models.CharField( + 'liczba mnoga', max_length=255, blank=True, + help_text='dotyczy gatunków' + ) + is_epoch_specific = models.BooleanField( + default=False, + help_text='Po wskazaniu tego gatunku, dodanie epoki byłoby nadmiarowe, np. „dramat romantyczny”' + ) + class Meta: verbose_name = _('genre') verbose_name_plural = _('genres') class Kind(Category): + collective_noun = models.CharField( + 'określenie zbiorowe', max_length=255, blank=True, + help_text='np. „Liryka” albo „Twórczość dramatyczna”' + ) + class Meta: verbose_name = _('kind') verbose_name_plural = _('kinds') @@ -159,11 +204,12 @@ class Book(WikidataModel): ) scans_source = models.CharField(_("scans source"), max_length=255, blank=True) text_source = models.CharField(_("text source"), max_length=255, blank=True) - notes = models.TextField(_("notes"), blank=True) + notes = models.TextField(_("notes"), blank=True, help_text=_('private')) priority = models.PositiveSmallIntegerField( _("priority"), default=0, choices=[(0, _("Low")), (1, _("Medium")), (2, _("High"))] ) + original_year = models.IntegerField(_('original publication year'), null=True, blank=True) pd_year = models.IntegerField(_('year of entry into PD'), null=True, blank=True) gazeta_link = models.CharField(_("gazeta link"), max_length=255, blank=True) collections = models.ManyToManyField("Collection", blank=True, verbose_name=_("collections")) @@ -186,10 +232,13 @@ class Book(WikidataModel): title = WIKIDATA.TITLE language = WIKIDATA.LANGUAGE based_on = WIKIDATA.BASED_ON - notes = "description" + original_year = WIKIDATA.PUBLICATION_DATE + notes = WikiMedia.append("description") def __str__(self): txt = self.title + if self.original_year: + txt = f"{txt} ({self.original_year})" astr = self.authors_str() if astr: txt = f"{txt}, {astr}" @@ -206,15 +255,31 @@ class Book(WikidataModel): return f'https://wolnelektury.pl/katalog/lektura/{self.slug}/' def authors_str(self): + if not self.pk: + return '' return ", ".join(str(author) for author in self.authors.all()) authors_str.admin_order_field = 'authors__last_name' authors_str.short_description = _('Author') def translators_str(self): + if not self.pk: + return '' return ", ".join(str(author) for author in self.translators.all()) translators_str.admin_order_field = 'translators__last_name' translators_str.short_description = _('Translator') + def authors_first_names(self): + return ', '.join(a.first_name for a in self.authors.all()) + + def authors_last_names(self): + return ', '.join(a.last_name for a in self.authors.all()) + + def translators_first_names(self): + return ', '.join(a.first_name for a in self.translators.all()) + + def translators_last_names(self): + return ', '.join(a.last_name for a in self.translators.all()) + def get_estimated_costs(self): return { work_type: work_type.calculate(self) @@ -225,7 +290,7 @@ class Book(WikidataModel): class CollectionCategory(models.Model): name = models.CharField(_("name"), max_length=255) parent = models.ForeignKey('self', models.SET_NULL, related_name='children', null=True, blank=True, verbose_name=_("parent")) - notes = models.TextField(_("notes"), blank=True) + notes = models.TextField(_("notes"), blank=True, help_text=_('private')) class Meta: ordering = ('parent__name', 'name') @@ -243,7 +308,8 @@ class Collection(models.Model): name = models.CharField(_("name"), max_length=255) slug = models.SlugField(max_length=255, unique=True) category = models.ForeignKey(CollectionCategory, models.SET_NULL, null=True, blank=True, verbose_name=_("category")) - notes = models.TextField(_("notes"), blank=True) + notes = models.TextField(_("notes"), blank=True, help_text=_('private')) + description = models.TextField(_("description"), blank=True) class Meta: ordering = ('category', 'name')