From 185000c87f53797a565300180cda99159a47f081 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Caux?= <git@jscaux.org> Date: Sun, 20 Feb 2022 21:38:47 +0100 Subject: [PATCH] Make Publication citation a computed field --- .../0115_publication_cf_citation.py | 18 ++++++++++++++++ scipost_django/journals/models/publication.py | 21 +++++++++++++------ 2 files changed, 33 insertions(+), 6 deletions(-) create mode 100644 scipost_django/journals/migrations/0115_publication_cf_citation.py diff --git a/scipost_django/journals/migrations/0115_publication_cf_citation.py b/scipost_django/journals/migrations/0115_publication_cf_citation.py new file mode 100644 index 000000000..5e7a60ab1 --- /dev/null +++ b/scipost_django/journals/migrations/0115_publication_cf_citation.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2022-02-20 20:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('journals', '0114_journal_required_article_elements'), + ] + + operations = [ + migrations.AddField( + model_name='publication', + name='cf_citation', + field=models.CharField(blank=True, max_length=1024), + ), + ] diff --git a/scipost_django/journals/models/publication.py b/scipost_django/journals/models/publication.py index 3a17a2891..af0fb381d 100644 --- a/scipost_django/journals/models/publication.py +++ b/scipost_django/journals/models/publication.py @@ -167,6 +167,7 @@ class Publication(models.Model): ) # Needs `auto_now` as its not explicity updated anywhere? # Calculated fields + cf_citation = models.CharField(max_length=1024, blank=True) cf_author_affiliation_indices_list = ArrayField( ArrayField( models.PositiveSmallIntegerField(blank=True, null=True), default=list @@ -361,30 +362,38 @@ class Publication(models.Model): @property def citation(self): + if self.cf_citation: + return self.cf_citation + citation = "" """Return Publication name in the preferred citation format.""" if self.in_issue and self.in_issue.in_volume: - return "{journal} {volume}, {paper_nr} ({year})".format( + citation = "{journal} {volume}, {paper_nr} ({year})".format( journal=self.in_issue.in_volume.in_journal.name_abbrev, volume=self.in_issue.in_volume.number, paper_nr=self.get_paper_nr(), year=self.publication_date.strftime("%Y"), ) elif self.in_issue and self.in_issue.in_journal: - return "{journal} {issue}, {paper_nr} ({year})".format( + citation = "{journal} {issue}, {paper_nr} ({year})".format( journal=self.in_issue.in_journal.name_abbrev, issue=self.in_issue.number, paper_nr=self.get_paper_nr(), year=self.publication_date.strftime("%Y"), ) elif self.in_journal: - return "{journal} {paper_nr} ({year})".format( + citation = "{journal} {paper_nr} ({year})".format( journal=self.in_journal.name_abbrev, paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y"), ) - return "{paper_nr} ({year})".format( - paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y") - ) + else: + citation = "{paper_nr} ({year})".format( + paper_nr=self.paper_nr, year=self.publication_date.strftime("%Y") + ) + self.cf_citation = citation + self.save() + return citation + def get_cc_license_URI(self): for (key, val) in CC_LICENSES_URI: -- GitLab