Skip to content

Commit

Permalink
Merge pull request #1514 from DDMAL/fixed-1505-institutions
Browse files Browse the repository at this point in the history
Add institutions model
  • Loading branch information
dchiller committed Jun 13, 2024
2 parents 2050973 + 2d213fd commit 4c92016
Show file tree
Hide file tree
Showing 13 changed files with 383 additions and 4 deletions.
2 changes: 2 additions & 0 deletions django/cantusdb_project/main_app/admin/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,5 @@
from main_app.admin.segment import SegmentAdmin
from main_app.admin.sequence import SequenceAdmin
from main_app.admin.source import SourceAdmin
from main_app.admin.institution import InstitutionAdmin
from main_app.admin.institution_identifier import InstitutionIdentifierAdmin
24 changes: 22 additions & 2 deletions django/cantusdb_project/main_app/admin/institution.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,25 @@
from django.contrib import admin

from main_app.admin.base_admin import BaseModelAdmin
from main_app.models import Institution, InstitutionIdentifier

class InstitutionAdmin(admin.ModelAdmin):
pass

class InstitutionIdentifierInline(admin.TabularInline):
model = InstitutionIdentifier
extra = 0
exclude = ["created_by", "last_updated_by"]


@admin.register(Institution)
class InstitutionAdmin(BaseModelAdmin):
list_display = ("name", "siglum", "get_city_region", "country")
search_fields = ("name", "siglum", "city", "region", "alternate_names")
list_filter = ("city",)
inlines = (InstitutionIdentifierInline,)

def get_city_region(self, obj) -> str:
city: str = obj.city if obj.city else "[No city]"
region: str = f"({obj.region})" if obj.region else ""
return f"{city} {region}"

get_city_region.short_description = "City"
Original file line number Diff line number Diff line change
@@ -1,5 +1,10 @@
from django.contrib import admin

from main_app.admin.base_admin import BaseModelAdmin
from main_app.models import InstitutionIdentifier

class InstitutionIdentifierAdmin(admin.ModelAdmin):
pass

@admin.register(InstitutionIdentifier)
class InstitutionIdentifierAdmin(BaseModelAdmin):
list_display = ('identifier', 'identifier_type')
raw_id_fields = ("institution",)
26 changes: 26 additions & 0 deletions django/cantusdb_project/main_app/identifiers.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
class ExternalIdentifiers:
RISM = 1
VIAF = 2
WIKIDATA = 3
GND = 4
BNF = 5
LC = 6


IDENTIFIER_TYPES = (
(ExternalIdentifiers.RISM, "RISM Online"),
(ExternalIdentifiers.VIAF, "VIAF"),
(ExternalIdentifiers.WIKIDATA, "Wikidata"),
(ExternalIdentifiers.GND, "GND (Gemeinsame Normdatei)"),
(ExternalIdentifiers.BNF, "Bibliothèque national de France"),
(ExternalIdentifiers.LC, "Library of Congress"),
)

TYPE_PREFIX = {
ExternalIdentifiers.RISM: ("rism", "https://rism.online/"),
ExternalIdentifiers.VIAF: ("viaf", "https://viaf.org/viaf/"),
ExternalIdentifiers.WIKIDATA: ("wkp", "https://www.wikidata.org/wiki/"),
ExternalIdentifiers.GND: ("dnb", "https://d-nb.info/gnd/"),
ExternalIdentifiers.BNF: ("bnf", "https://catalogue.bnf.fr/ark:/12148/cb"),
ExternalIdentifiers.LC: ("lc", "https://id.loc.gov/authorities/"),
}
67 changes: 67 additions & 0 deletions django/cantusdb_project/main_app/migrations/0013_institution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
# Generated by Django 4.1.6 on 2024-06-06 12:06

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("main_app", "0012_alter_source_date_alter_source_title"),
]

operations = [
migrations.CreateModel(
name="Institution",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"date_created",
models.DateTimeField(
auto_now_add=True, help_text="The date this entry was created"
),
),
(
"date_updated",
models.DateTimeField(
auto_now=True, help_text="The date this entry was updated"
),
),
("name", models.CharField(default="s.n.", max_length=255)),
("siglum", models.CharField(default="XX-Nn", max_length=32)),
("city", models.CharField(blank=True, max_length=64, null=True)),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="%(class)s_created_by_user",
to=settings.AUTH_USER_MODEL,
),
),
(
"last_updated_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="%(class)s_last_updated_by_user",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"abstract": False,
},
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
# Generated by Django 4.1.6 on 2024-06-06 12:16

from django.conf import settings
from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):
dependencies = [
migrations.swappable_dependency(settings.AUTH_USER_MODEL),
("main_app", "0013_institution"),
]

operations = [
migrations.CreateModel(
name="InstitutionIdentifier",
fields=[
(
"id",
models.AutoField(
auto_created=True,
primary_key=True,
serialize=False,
verbose_name="ID",
),
),
(
"date_created",
models.DateTimeField(
auto_now_add=True, help_text="The date this entry was created"
),
),
(
"date_updated",
models.DateTimeField(
auto_now=True, help_text="The date this entry was updated"
),
),
(
"identifier",
models.CharField(
help_text="Do not provide the full URL here; only the identifier.",
max_length=512,
),
),
(
"identifier_type",
models.IntegerField(
choices=[
(1, "RISM Online"),
(2, "VIAF"),
(3, "Wikidata"),
(4, "GND (Gemeinsame Normdatei)"),
(5, "Bibliothèque national de France"),
(6, "Library of Congress"),
]
),
),
(
"created_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="%(class)s_created_by_user",
to=settings.AUTH_USER_MODEL,
),
),
(
"institution",
models.ForeignKey(
on_delete=django.db.models.deletion.CASCADE,
related_name="identifiers",
to="main_app.institution",
),
),
(
"last_updated_by",
models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.CASCADE,
related_name="%(class)s_last_updated_by_user",
to=settings.AUTH_USER_MODEL,
),
),
],
options={
"abstract": False,
},
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Generated by Django 4.2.11 on 2024-06-06 13:05

from django.db import migrations, models
import django.db.models.deletion


class Migration(migrations.Migration):

dependencies = [
("main_app", "0014_institutionidentifier"),
]

operations = [
migrations.AddField(
model_name="source",
name="holding_institution",
field=models.ForeignKey(
blank=True,
null=True,
on_delete=django.db.models.deletion.PROTECT,
to="main_app.institution",
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
# Generated by Django 4.1.6 on 2024-06-11 09:05

from django.db import migrations, models


class Migration(migrations.Migration):
replaces = [
("main_app", "0016_institution_alternate_names_institution_region"),
("main_app", "0017_institution_country_alter_institution_city"),
]

dependencies = [
("main_app", "0015_source_holding_institution"),
]

operations = [
migrations.AddField(
model_name="institution",
name="alternate_names",
field=models.TextField(
blank=True,
help_text="Enter alternate names on separate lines.",
null=True,
),
),
migrations.AddField(
model_name="institution",
name="region",
field=models.CharField(
blank=True,
help_text='Province / State / Canton / County. Used to disambiguate cities, e.g., "London (Ontario)".',
max_length=64,
null=True,
),
),
migrations.AddField(
model_name="institution",
name="country",
field=models.CharField(default="s.l.", max_length=64),
),
migrations.AlterField(
model_name="institution",
name="city",
field=models.CharField(
blank=True,
help_text="City / Town / Village / Settlement",
max_length=64,
null=True,
),
),
]
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Generated by Django 4.1.6 on 2024-06-11 15:01

from django.db import migrations, models


class Migration(migrations.Migration):
dependencies = [
(
"main_app",
"0016_institution_alternate_names_institution_region_squashed_0017_institution_country_alter_institution_city",
),
]

operations = [
migrations.AddField(
model_name="institution",
name="former_sigla",
field=models.TextField(
blank=True, help_text="Enter former sigla on separate lines.", null=True
),
),
]
2 changes: 2 additions & 0 deletions django/cantusdb_project/main_app/models/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,3 +11,5 @@
from main_app.models.sequence import Sequence
from main_app.models.rism_siglum import RismSiglum
from main_app.models.source import Source
from main_app.models.institution import Institution
from main_app.models.institution_identifier import InstitutionIdentifier
29 changes: 29 additions & 0 deletions django/cantusdb_project/main_app/models/institution.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
from django.db import models

from main_app.models import BaseModel


region_help_text = """Province / State / Canton / County. Used to disambiguate cities, e.g., "London (Ontario)"."""
city_help_text = """City / Town / Village / Settlement"""


class Institution(BaseModel):
name = models.CharField(max_length=255, default="s.n.")
siglum = models.CharField(max_length=32, default="XX-Nn")
city = models.CharField(
max_length=64, blank=True, null=True, help_text=city_help_text
)
region = models.CharField(
max_length=64, blank=True, null=True, help_text=region_help_text
)
country = models.CharField(max_length=64, default="s.l.")
alternate_names = models.TextField(
blank=True, null=True, help_text="Enter alternate names on separate lines."
)
former_sigla = models.TextField(
blank=True, null=True, help_text="Enter former sigla on separate lines."
)

def __str__(self) -> str:
sigl: str = f"({self.siglum})" if self.siglum else ""
return f"{self.name} {sigl}"
Loading

0 comments on commit 4c92016

Please sign in to comment.