summaryrefslogtreecommitdiff
path: root/archaeological_finds/models_treatments.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-11-22 12:33:44 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-02-19 14:45:56 +0100
commitf10b03c55ece933e4277cdf1e7d4acfba9fdd7ed (patch)
treedf505f12323d4bcc2e3f63521c9ada64b3585e7f /archaeological_finds/models_treatments.py
parente7dfaffc372292d8467da8a8be872e9ac9456618 (diff)
downloadIshtar-f10b03c55ece933e4277cdf1e7d4acfba9fdd7ed.tar.bz2
Ishtar-f10b03c55ece933e4277cdf1e7d4acfba9fdd7ed.zip
🗃️ database: exhibition
Diffstat (limited to 'archaeological_finds/models_treatments.py')
-rw-r--r--archaeological_finds/models_treatments.py98
1 files changed, 98 insertions, 0 deletions
diff --git a/archaeological_finds/models_treatments.py b/archaeological_finds/models_treatments.py
index 9a9455ea1..933df0fa8 100644
--- a/archaeological_finds/models_treatments.py
+++ b/archaeological_finds/models_treatments.py
@@ -1454,3 +1454,101 @@ class TreatmentFile(
m2m_changed.connect(document_attached_changed, sender=TreatmentFile.documents.through)
post_save.connect(cached_label_changed, sender=TreatmentFile)
+
+
+class ExhibitionType(GeneralType):
+ class Meta:
+ verbose_name = _("Exhibition type")
+ verbose_name_plural = _("Exhibition types")
+ ordering = ("label",)
+ ADMIN_SECTION = _("Treatments")
+
+
+class Exhibition(
+ DocumentItem,
+ BaseHistorizedItem,
+ CompleteIdentifierItem,
+ OwnPerms,
+ ValueGetter,
+ MainItem,
+ AssociatedFindBasket,
+):
+ SLUG = "exhibition"
+ APP = "archaeological_finds"
+ MODEL = SLUG
+ SHOW_URL = "show-exhibition"
+ DELETE_URL = "delete-exhibition"
+ TABLE_COLS = ["year", "reference", "name"]
+ BASE_SEARCH_VECTORS = [
+ SearchVectorConfig("exhibition_type__label"),
+ SearchVectorConfig("reference"),
+ SearchVectorConfig("name"),
+ SearchVectorConfig("comment", "local"),
+ ]
+ name = models.TextField(_("Name"))
+ exhibition_type = models.ForeignKey(
+ ExhibitionType,
+ verbose_name=_("Exhibition type"),
+ on_delete=models.PROTECT,
+ )
+ year = models.IntegerField(_("Year"), default=get_current_year)
+ reference = models.TextField(
+ _("Reference"), blank=True, null=True, default="-"
+ )
+ in_charge = models.ForeignKey(
+ Person,
+ related_name="exhibitions",
+ verbose_name=_("Person in charge"),
+ on_delete=models.SET_NULL,
+ blank=True,
+ null=True,
+ )
+ # prevent circular imports...
+ associated_basket_id = models.PositiveIntegerField(
+ verbose_name=_("Basket ID"), blank=True, null=True,
+ help_text=_("Reference basket")
+ )
+ comment = models.TextField(_("Comment"), blank=True, default="")
+ treatment_files = models.ManyToManyField(
+ TreatmentFile,
+ related_name="exhibitions",
+ verbose_name=_("Loans"),
+ blank=True,
+ )
+ documents = models.ManyToManyField(
+ Document,
+ related_name="exhibitions",
+ verbose_name=_("Documents"),
+ blank=True,
+ )
+ main_image = models.ForeignKey(
+ Document,
+ related_name="main_image_exhibitions",
+ on_delete=models.SET_NULL,
+ verbose_name=_("Main image"),
+ blank=True,
+ null=True,
+ )
+ timestamp_geo = None
+ timestamp_label = None
+ complete_identifier = None
+ custom_index = None
+ need_update = None
+ cached_label = None
+ history = HistoricalRecords()
+
+ class Meta:
+ verbose_name = _("Exhibition")
+ verbose_name_plural = _("Exhibitions")
+ unique_together = ("year", "name")
+ permissions = (
+ ("view_own_exhibition", "Can view own Exhibition"),
+ ("change_own_exhibition", "Can change own Exhibition"),
+ ("delete_own_exhibition", "Can delete own Exhibition"),
+ )
+ ordering = ("year", "name")
+ indexes = [
+ GinIndex(fields=["data"]),
+ ]
+ ADMIN_SECTION = _("Treatments")
+