Add more properties in catalogue.
authorRadek Czajka <rczajka@rczajka.pl>
Tue, 27 Oct 2020 13:26:52 +0000 (14:26 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Tue, 27 Oct 2020 13:26:52 +0000 (14:26 +0100)
src/catalogue/admin.py
src/catalogue/constants.py
src/catalogue/locale/pl/LC_MESSAGES/django.mo
src/catalogue/locale/pl/LC_MESSAGES/django.po
src/catalogue/migrations/0019_auto_20201027_1331.py [new file with mode: 0644]
src/catalogue/migrations/0020_auto_20201027_1416.py [new file with mode: 0644]
src/catalogue/migrations/0021_auto_20201027_1422.py [new file with mode: 0644]
src/catalogue/migrations/0022_auto_20201027_1424.py [new file with mode: 0644]
src/catalogue/models.py

index 00617cb..608d625 100644 (file)
@@ -2,6 +2,7 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django.contrib import admin
+from django.utils.translation import gettext_lazy as _
 from . import models
 from .wikidata import WikidataAdminMixin
 
@@ -12,11 +13,13 @@ class AuthorAdmin(WikidataAdminMixin, admin.ModelAdmin):
         "last_name",
         "status",
         "year_of_death",
+        "gender",
+        "nationality",
         "priority",
         "wikidata_link",
         "slug",
     ]
-    list_filter = ["year_of_death", "priority", "collections", "status"]
+    list_filter = ["year_of_death", "priority", "collections", "status", "gender", "nationality"]
     search_fields = ["first_name", "last_name", "wikidata"]
     prepopulated_fields = {"slug": ("first_name", "last_name")}
     autocomplete_fields = ["collections"]
@@ -36,14 +39,14 @@ class BookAdmin(WikidataAdminMixin, admin.ModelAdmin):
         "wikidata_link",
     ]
     search_fields = ["title", "wikidata"]
-    autocomplete_fields = ["authors", "translators", "based_on", "collections"]
+    autocomplete_fields = ["authors", "translators", "based_on", "collections", "epochs", "genres", "kinds"]
     prepopulated_fields = {"slug": ("title",)}
     list_filter = ["language", "pd_year", "collections"]
     readonly_fields = ["wikidata_link"]
     fieldsets = [
         (None, {"fields": [("wikidata", "wikidata_link")]}),
         (
-            "Identification",
+            _("Identification"),
             {
                 "fields": [
                     "title",
@@ -57,7 +60,17 @@ class BookAdmin(WikidataAdminMixin, admin.ModelAdmin):
             },
         ),
         (
-            "Plan",
+            _("Features"),
+            {
+                "fields": [
+                    "epochs",
+                    "genres",
+                    "kinds",
+                ]
+            },
+        ),
+        (
+            _("Plan"),
             {
                 "fields": [
                     "scans_source",
@@ -99,3 +112,11 @@ class CollectionAdmin(admin.ModelAdmin):
 
 
 admin.site.register(models.Collection, CollectionAdmin)
+
+
+class CategoryAdmin(admin.ModelAdmin):
+    search_fields = ["name"]
+
+admin.site.register(models.Epoch, CategoryAdmin)
+admin.site.register(models.Genre, CategoryAdmin)
+admin.site.register(models.Kind, CategoryAdmin)
index 88d0e33..5bb775a 100644 (file)
@@ -2,6 +2,7 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 class WIKIDATA:
+    GENDER = "P21"
     AUTHOR = "P50"
     LANGUAGE = "P407"
     DATE_OF_DEATH = "P570"
index eb7cf85..da3bb29 100644 (file)
Binary files a/src/catalogue/locale/pl/LC_MESSAGES/django.mo and b/src/catalogue/locale/pl/LC_MESSAGES/django.mo differ
index 3b3d06b..2bf5056 100644 (file)
@@ -7,8 +7,10 @@ msgid ""
 msgstr ""
 "Project-Id-Version: \n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2020-04-20 16:44+0200\n"
-"PO-Revision-Date: 2020-04-20 16:52+0200\n"
+"POT-Creation-Date: 2020-10-27 14:25+0100\n"
+"PO-Revision-Date: 2020-10-27 14:25+0100\n"
+"Last-Translator: \n"
+"Language-Team: \n"
 "Language: pl\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=UTF-8\n"
@@ -16,47 +18,111 @@ msgstr ""
 "Plural-Forms: nplurals=4; plural=(n==1 ? 0 : (n%10>=2 && n%10<=4) && (n"
 "%100<12 || n%100>14) ? 1 : n!=1 && (n%10>=0 && n%10<=1) || (n%10>=5 && n"
 "%10<=9) || (n%100>=12 && n%100<=14) ? 2 : 3);\n"
-"Last-Translator: \n"
-"Language-Team: \n"
-"X-Generator: Poedit 2.2.4\n"
+"X-Generator: Poedit 2.3\n"
+
+#: catalogue/admin.py:49
+msgid "Identification"
+msgstr "Identyfikacja"
 
-#: models.py:22
+#: catalogue/admin.py:63
+msgid "Features"
+msgstr "Cechy"
+
+#: catalogue/admin.py:73
+msgid "Plan"
+msgstr "Plan"
+
+#: catalogue/models.py:26
 msgid "Alive"
 msgstr "Żyje"
 
-#: models.py:23
+#: catalogue/models.py:27
 msgid "Dead"
 msgstr "Zmarły"
 
-#: models.py:24
+#: catalogue/models.py:28
 msgid "Long dead"
 msgstr "Dawno zmarły"
 
-#: models.py:25
+#: catalogue/models.py:29
 msgid "Unknown"
 msgstr "Nieznany"
 
-#: models.py:37 models.py:83
+#: catalogue/models.py:41 catalogue/models.py:120
 msgid "Low"
 msgstr "Niski"
 
-#: models.py:37 models.py:83
+#: catalogue/models.py:41 catalogue/models.py:120
 msgid "Medium"
 msgstr "Średni"
 
-#: models.py:37 models.py:83
+#: catalogue/models.py:41 catalogue/models.py:120
 msgid "High"
 msgstr "Wysoki"
 
-#: templates/catalogue/catalogue.html:7 templates/catalogue/catalogue.html:13
+#: catalogue/models.py:46
+msgid "author"
+msgstr "autor"
+
+#: catalogue/models.py:47
+msgid "authors"
+msgstr "autorzy"
+
+#: catalogue/models.py:83
+msgid "epoch"
+msgstr "epoka"
+
+#: catalogue/models.py:84
+msgid "epochs"
+msgstr "epoki"
+
+#: catalogue/models.py:89
+msgid "genre"
+msgstr "gatunek"
+
+#: catalogue/models.py:90
+msgid "genres"
+msgstr "gatunki"
+
+#: catalogue/models.py:95
+msgid "kind"
+msgstr "rodzaj"
+
+#: catalogue/models.py:96
+msgid "kinds"
+msgstr "rodzaje"
+
+#: catalogue/models.py:130
+msgid "book"
+msgstr "książka"
+
+#: catalogue/models.py:131
+msgid "books"
+msgstr "książki"
+
+#: catalogue/models.py:170
+msgid "collection"
+msgstr "kolekcja"
+
+#: catalogue/models.py:171
+msgid "collections"
+msgstr "kolekcje"
+
+#: catalogue/templates/catalogue/author_detail.html:7
+#: catalogue/templates/catalogue/author_detail.html:13
+#: catalogue/templates/catalogue/book_detail.html:7
+#: catalogue/templates/catalogue/book_detail.html:13
+#: catalogue/templates/catalogue/catalogue.html:7
+#: catalogue/templates/catalogue/catalogue.html:13
 msgid "Catalogue"
 msgstr "Katalog"
 
-#: templates/catalogue/catalogue.html:67
+#: catalogue/templates/catalogue/author_detail.html:66
+#: catalogue/templates/catalogue/catalogue.html:67
 msgid "trans."
 msgstr "tłum."
 
-#: templates/catalogue/catalogue.html:90
+#: catalogue/templates/catalogue/catalogue.html:90
 #, python-format
 msgid "%(c)s author"
 msgid_plural "%(c)s authors"
@@ -65,7 +131,6 @@ msgstr[1] "%(c)s autorów"
 msgstr[2] "%(c)s autorów"
 msgstr[3] ""
 
-#: wikidata.py:18
+#: catalogue/wikidata.py:18
 msgid "If you have a Wikidata ID, like \"Q1337\", enter it and save."
-msgstr ""
-"Jeśli masz identyfikator Wikidanych , jak „Q1337”, wklej go i zapisz."
+msgstr "Jeśli masz identyfikator Wikidanych , jak „Q1337”, wklej go i zapisz."
diff --git a/src/catalogue/migrations/0019_auto_20201027_1331.py b/src/catalogue/migrations/0019_auto_20201027_1331.py
new file mode 100644 (file)
index 0000000..bda8722
--- /dev/null
@@ -0,0 +1,23 @@
+# Generated by Django 3.0.4 on 2020-10-27 13:31
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0018_auto_20200417_1859'),
+    ]
+
+    operations = [
+        migrations.AddField(
+            model_name='author',
+            name='gender',
+            field=models.CharField(blank=True, max_length=255),
+        ),
+        migrations.AddField(
+            model_name='author',
+            name='nationality',
+            field=models.CharField(blank=True, max_length=255),
+        ),
+    ]
diff --git a/src/catalogue/migrations/0020_auto_20201027_1416.py b/src/catalogue/migrations/0020_auto_20201027_1416.py
new file mode 100644 (file)
index 0000000..274c479
--- /dev/null
@@ -0,0 +1,64 @@
+# Generated by Django 3.0.4 on 2020-10-27 14:16
+
+from django.db import migrations, models
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0019_auto_20201027_1331'),
+    ]
+
+    operations = [
+        migrations.CreateModel(
+            name='Epoch',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('wikidata', models.CharField(blank=True, help_text='If you have a Wikidata ID, like "Q1337", enter it and save.', max_length=255)),
+                ('name', models.CharField(max_length=255)),
+                ('slug', models.SlugField(max_length=255, unique=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.CreateModel(
+            name='Genre',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('wikidata', models.CharField(blank=True, help_text='If you have a Wikidata ID, like "Q1337", enter it and save.', max_length=255)),
+                ('name', models.CharField(max_length=255)),
+                ('slug', models.SlugField(max_length=255, unique=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.CreateModel(
+            name='Kind',
+            fields=[
+                ('id', models.AutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')),
+                ('wikidata', models.CharField(blank=True, help_text='If you have a Wikidata ID, like "Q1337", enter it and save.', max_length=255)),
+                ('name', models.CharField(max_length=255)),
+                ('slug', models.SlugField(max_length=255, unique=True)),
+            ],
+            options={
+                'abstract': False,
+            },
+        ),
+        migrations.AddField(
+            model_name='book',
+            name='epochs',
+            field=models.ManyToManyField(blank=True, to='catalogue.Epoch'),
+        ),
+        migrations.AddField(
+            model_name='book',
+            name='genres',
+            field=models.ManyToManyField(blank=True, to='catalogue.Genre'),
+        ),
+        migrations.AddField(
+            model_name='book',
+            name='kinds',
+            field=models.ManyToManyField(blank=True, to='catalogue.Kind'),
+        ),
+    ]
diff --git a/src/catalogue/migrations/0021_auto_20201027_1422.py b/src/catalogue/migrations/0021_auto_20201027_1422.py
new file mode 100644 (file)
index 0000000..0f77d78
--- /dev/null
@@ -0,0 +1,37 @@
+# Generated by Django 3.0.4 on 2020-10-27 14:22
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0020_auto_20201027_1416'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='author',
+            options={'ordering': ('last_name', 'first_name', 'year_of_death'), 'verbose_name': 'author', 'verbose_name_plural': 'authors'},
+        ),
+        migrations.AlterModelOptions(
+            name='book',
+            options={'ordering': ('title',), 'verbose_name': 'book', 'verbose_name_plural': 'books'},
+        ),
+        migrations.AlterModelOptions(
+            name='collection',
+            options={'verbose_name': 'collection', 'verbose_name_plural': 'collections'},
+        ),
+        migrations.AlterModelOptions(
+            name='epoch',
+            options={'verbose_name': 'author', 'verbose_name_plural': 'authors'},
+        ),
+        migrations.AlterModelOptions(
+            name='genre',
+            options={'verbose_name': 'genre', 'verbose_name_plural': 'genres'},
+        ),
+        migrations.AlterModelOptions(
+            name='kind',
+            options={'verbose_name': 'kind', 'verbose_name_plural': 'kinds'},
+        ),
+    ]
diff --git a/src/catalogue/migrations/0022_auto_20201027_1424.py b/src/catalogue/migrations/0022_auto_20201027_1424.py
new file mode 100644 (file)
index 0000000..434e745
--- /dev/null
@@ -0,0 +1,17 @@
+# Generated by Django 3.0.4 on 2020-10-27 14:24
+
+from django.db import migrations
+
+
+class Migration(migrations.Migration):
+
+    dependencies = [
+        ('catalogue', '0021_auto_20201027_1422'),
+    ]
+
+    operations = [
+        migrations.AlterModelOptions(
+            name='epoch',
+            options={'verbose_name': 'epoch', 'verbose_name_plural': 'epochs'},
+        ),
+    ]
index 0863c1e..682e97b 100644 (file)
@@ -2,6 +2,7 @@ from django.apps import apps
 from django.db import models
 from django.urls import reverse
 from django.utils.translation import gettext_lazy as _
+from wikidata.client import Client
 from .constants import WIKIDATA
 from .utils import UnrelatedManager
 from .wikidata import WikidataMixin
@@ -15,6 +16,8 @@ class Author(WikidataMixin, models.Model):
     name_de = models.CharField(max_length=255, blank=True)
     name_lt = models.CharField(max_length=255, blank=True)
 
+    gender = models.CharField(max_length=255, blank=True)
+    nationality = models.CharField(max_length=255, blank=True)
     year_of_death = models.SmallIntegerField(null=True, blank=True)
     status = models.PositiveSmallIntegerField(
         null=True,
@@ -40,12 +43,15 @@ class Author(WikidataMixin, models.Model):
     collections = models.ManyToManyField("Collection", blank=True)
 
     class Meta:
+        verbose_name = _('author')
+        verbose_name_plural = _('authors')
         ordering = ("last_name", "first_name", "year_of_death")
 
     class Wikidata:
         first_name = WIKIDATA.GIVEN_NAME
         last_name = WIKIDATA.LAST_NAME
         year_of_death = WIKIDATA.DATE_OF_DEATH
+        gender = WIKIDATA.GENDER
         notes = "description"
 
     def __str__(self):
@@ -63,6 +69,33 @@ class Author(WikidataMixin, models.Model):
         else:
             return None
 
+
+class Category(WikidataMixin, models.Model):
+    name = models.CharField(max_length=255)
+    slug = models.SlugField(max_length=255, unique=True)
+
+    class Meta:
+        abstract = True
+
+
+class Epoch(Category):
+    class Meta:
+        verbose_name = _('epoch')
+        verbose_name_plural = _('epochs')
+
+
+class Genre(Category):
+    class Meta:
+        verbose_name = _('genre')
+        verbose_name_plural = _('genres')
+
+
+class Kind(Category):
+    class Meta:
+        verbose_name = _('kind')
+        verbose_name_plural = _('kinds')
+
+
 class Book(WikidataMixin, models.Model):
     slug = models.SlugField(max_length=255, blank=True, null=True, unique=True)
     authors = models.ManyToManyField(Author, blank=True)
@@ -72,6 +105,9 @@ class Book(WikidataMixin, models.Model):
         related_query_name="translated_book",
         blank=True,
     )
+    epochs = models.ManyToManyField(Epoch, blank=True)
+    kinds = models.ManyToManyField(Kind, blank=True)
+    genres = models.ManyToManyField(Genre, blank=True)
     title = models.CharField(max_length=255, blank=True)
     language = models.CharField(max_length=255, blank=True)
     based_on = models.ForeignKey(
@@ -91,6 +127,8 @@ class Book(WikidataMixin, models.Model):
 
     class Meta:
         ordering = ("title",)
+        verbose_name = _('book')
+        verbose_name_plural = _('books')
 
     class Wikidata:
         authors = WIKIDATA.AUTHOR
@@ -128,5 +166,10 @@ class Collection(models.Model):
     name = models.CharField(max_length=255)
     slug = models.SlugField(max_length=255, unique=True)
 
+    class Meta:
+        verbose_name = _('collection')
+        verbose_name_plural = _('collections')
+
     def __str__(self):
         return self.name
+