More author data in catalogue.
[redakcja.git] / src / catalogue / wikidata.py
index 4e63c09..4fc8bbd 100644 (file)
@@ -1,6 +1,10 @@
+# This file is part of FNP-Redakcja, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from datetime import date
 from django.db import models
 from django.db.models.signals import m2m_changed
 from datetime import date
 from django.db import models
 from django.db.models.signals import m2m_changed
+from django.utils.html import format_html
 from django.utils.translation import gettext_lazy as _
 from django.dispatch import receiver
 from wikidata.client import Client
 from django.utils.translation import gettext_lazy as _
 from django.dispatch import receiver
 from wikidata.client import Client
@@ -10,9 +14,7 @@ from wikidata.datavalue import DatavalueError
 class WikidataMixin(models.Model):
     wikidata = models.CharField(
         max_length=255,
 class WikidataMixin(models.Model):
     wikidata = models.CharField(
         max_length=255,
-        null=True,
         blank=True,
         blank=True,
-        unique=True,
         help_text=_('If you have a Wikidata ID, like "Q1337", enter it and save.'),
     )
 
         help_text=_('If you have a Wikidata ID, like "Q1337", enter it and save.'),
     )
 
@@ -80,6 +82,17 @@ class WikidataMixin(models.Model):
                 wdvalue = wdvalue.label.get("pl", str(wdvalue.label))
             setattr(self, attname, wdvalue)
 
                 wdvalue = wdvalue.label.get("pl", str(wdvalue.label))
             setattr(self, attname, wdvalue)
 
+    def wikidata_link(self):
+        if self.wikidata:
+            return format_html(
+                '<a href="https://www.wikidata.org/wiki/{wd}" target="_blank">{wd}</a>',
+                wd=self.wikidata,
+            )
+        else:
+            return ""
+
+    wikidata_link.admin_order_field = "wikidata"
+
 
 class WikidataAdminMixin:
     def save_related(self, request, form, formsets, change):
 
 class WikidataAdminMixin:
     def save_related(self, request, form, formsets, change):