Source code for funders.models

__copyright__ = "Copyright © Stichting SciPost (SciPost Foundation)"
__license__ = "AGPL v3"


from django.db import models
from django.db.models import Q
from django.urls import reverse

from journals.models import Publication

from .managers import FunderQuerySet


[docs]class Funder(models.Model): """ A Funder instance is an organization present in the Fundref registry. Funding info metadata, which is deposited with our normal metadata deposits to Crossref (via Grants or generic Funders), is linked back to funders through Crossref's Crossmark service. """ name = models.CharField(max_length=256) acronym = models.CharField(max_length=32, blank=True) identifier = models.CharField(max_length=200, unique=True) organization = models.ForeignKey( "organizations.Organization", on_delete=models.CASCADE, blank=True, null=True ) objects = FunderQuerySet.as_manager() class Meta: ordering = ["name", "acronym"] def __str__(self): result = self.name if self.acronym: result += " (%s)" % self.acronym return result
[docs] def get_absolute_url(self): """Return the Funder detail page.""" return reverse("funders:funder_publications", args=(self.id,))
[docs]class Grant(models.Model): """An instance of a grant, award or other funding. In a Publication's metadata, all grants are listed in the Crossmark part of the metadata. """ funder = models.ForeignKey("funders.Funder", on_delete=models.CASCADE) number = models.CharField(max_length=64) recipient_name = models.CharField(max_length=64, blank=True) recipient = models.ForeignKey( "scipost.Contributor", blank=True, null=True, on_delete=models.CASCADE ) further_details = models.CharField(max_length=256, blank=True) class Meta: default_related_name = "grants" ordering = ["funder", "recipient", "recipient_name", "number"] unique_together = ("funder", "number") def __str__(self): grantstring = "%s, grant number %s" % (str(self.funder), self.number) if self.recipient: grantstring += " (%s)" % str(self.recipient) elif self.recipient_name: grantstring += " (%s)" % self.recipient_name if self.further_details: grantstring += " [%s]" % self.further_details return grantstring