Fix errors on serializing unsaved wikidata imports.
authorRadek Czajka <rczajka@rczajka.pl>
Thu, 10 Nov 2022 10:08:58 +0000 (11:08 +0100)
committerRadek Czajka <rczajka@rczajka.pl>
Thu, 10 Nov 2022 10:08:58 +0000 (11:08 +0100)
src/catalogue/models.py
src/catalogue/views.py

index 92b2765..f9a2ecf 100644 (file)
@@ -227,11 +227,15 @@ class Book(WikidataModel):
         return f'https://wolnelektury.pl/katalog/lektura/{self.slug}/'
     
     def authors_str(self):
         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):
         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')
         return ", ".join(str(author) for author in self.translators.all())
     translators_str.admin_order_field = 'translators__last_name'
     translators_str.short_description = _('Translator')
index 889a832..3e55d69 100644 (file)
@@ -165,7 +165,11 @@ class WikidataView(APIView):
             if attname.startswith("_"):
                 continue
             for fieldname, lang in obj.wikidata_fields_for_attribute(attname):
             if attname.startswith("_"):
                 continue
             for fieldname, lang in obj.wikidata_fields_for_attribute(attname):
-                d[fieldname] = getattr(obj, fieldname)
+                try:
+                    d[fieldname] = getattr(obj, fieldname)
+                except ValueError:
+                    # Like accessing related field on non-saved object.
+                    continue
 
                 if isinstance(d[fieldname], models.WikidataModel):
                     d[fieldname] = {
 
                 if isinstance(d[fieldname], models.WikidataModel):
                     d[fieldname] = {