diff options
| author | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-04-06 21:08:48 +0200 |
|---|---|---|
| committer | Étienne Loks <etienne.loks@iggdrasil.net> | 2026-04-06 21:08:48 +0200 |
| commit | 434b2bed4cc873e8fb6f7b0d47817f52dbb75f4a (patch) | |
| tree | ef266eea88eb9d07a0d241895179d551c45afb2f | |
| parent | 0d0d0c3fd685e82d6dc2357b2caf834b9dc9c764 (diff) | |
| download | Ishtar-434b2bed4cc873e8fb6f7b0d47817f52dbb75f4a.tar.bz2 Ishtar-434b2bed4cc873e8fb6f7b0d47817f52dbb75f4a.zip | |
✨ finds - relations between finds: forms, view
| -rw-r--r-- | archaeological_finds/forms.py | 30 | ||||
| -rw-r--r-- | archaeological_finds/models_finds.py | 10 | ||||
| -rw-r--r-- | archaeological_finds/urls.py | 8 | ||||
| -rw-r--r-- | archaeological_finds/views.py | 6 |
4 files changed, 53 insertions, 1 deletions
diff --git a/archaeological_finds/forms.py b/archaeological_finds/forms.py index 727657fc2..fdb44d0ac 100644 --- a/archaeological_finds/forms.py +++ b/archaeological_finds/forms.py @@ -92,6 +92,10 @@ from ishtar_common.forms import ( GeoItemSelect, ) from ishtar_common.forms_common import get_town_field +from archaeological_operations.forms import ( + RecordRelationsForm, + RecordRelationsFormSetBase, +) from archaeological_context_records.forms import DatingSelect from ishtar_common.models import ( @@ -925,6 +929,32 @@ class ResultingFindsForm(CustomForm, ManageOldType): return self.cleaned_data +class FindRecordRelationsForm(RecordRelationsForm): + current_model = models.FindRelationType + current_related_model = models.Find + associated_models = { + "right_record": models.Find, + "relation_type": models.FindRelationType, + } + ERROR_MISSING = _("You should select a find and a relation type.") + ERROR_SAME = _("A find cannot be related to himself.") + + right_record = forms.IntegerField( + label=_("Find"), + widget=widgets.JQueryAutoComplete( + reverse_lazy('autocomplete-find'), + associated_model=models.Find), + validators=[valid_id(models.Find)], required=False) + + +FindRecordRelationsFormSet = formset_factory( + FindRecordRelationsForm, can_delete=True, formset=RecordRelationsFormSetBase +) +FindRecordRelationsFormSet.form_label = _("Find - Relations") +FindRecordRelationsFormSet.form_admin_name = _("Find - Relations") +FindRecordRelationsFormSet.form_slug = "find-recordrelations" + + class QAFindFormMulti(MuseumForm, QAForm): form_admin_name = _("Find - Quick action - Modify") form_slug = "find-quickaction-modify" diff --git a/archaeological_finds/models_finds.py b/archaeological_finds/models_finds.py index 99ad1b1ea..57f7a4f79 100644 --- a/archaeological_finds/models_finds.py +++ b/archaeological_finds/models_finds.py @@ -2924,7 +2924,7 @@ class Find( # no particular rights: if you can view an item you can add it to your # own basket - actions = super(Find, self).get_extra_actions(request) + actions = super().get_extra_actions(request) is_locked = hasattr(self, "is_locked") and self.is_locked(request.user) profile = get_current_profile() @@ -2932,6 +2932,14 @@ class Find( if can_edit_find and not is_locked: actions += [ ( + reverse("find-relations-modify", args=[self.pk]), + _("Modify finds relations"), + "fa fa-retweet", + _("finds"), + "", + True, + ), + ( reverse("find-dating-add", args=[self.pk]), _("Add dating"), "fa fa-plus", diff --git a/archaeological_finds/urls.py b/archaeological_finds/urls.py index d1520d4ba..b9cbb58f7 100644 --- a/archaeological_finds/urls.py +++ b/archaeological_finds/urls.py @@ -99,6 +99,14 @@ urlpatterns = [ ), name="find-dating-delete", ), + path( + "find-relations-modify/<int:pk>)/", + check_permissions( + ["archaeological_finds.change_find", + "archaeological_finds.change_own_find"] + )(views.find_modify_relations), + name="find-relations-modify", + ), re_path(r"get-findbasket/$", views.get_find_basket, name="get-findbasket"), re_path( r"get-findbasket-write/$", diff --git a/archaeological_finds/views.py b/archaeological_finds/views.py index d11e820fa..541d1fc4e 100644 --- a/archaeological_finds/views.py +++ b/archaeological_finds/views.py @@ -63,6 +63,7 @@ from ishtar_common.views_item import ( get_autocomplete_queries, get_autocomplete_query ) +from archaeological_operations.views import get_relation_modify from archaeological_operations.wizards import AdministrativeActDeletionWizard from archaeological_finds import wizards @@ -546,6 +547,11 @@ autocomplete_functionalarea = get_autocomplete_generic(models.FunctionalArea) autocomplete_technicalarea = get_autocomplete_generic(models.TechnicalAreaType) autocomplete_technicalprocess = get_autocomplete_generic(models.TechnicalProcessType) +find_modify_relations = get_relation_modify( + models.Find, models.FindRecordRelations, + forms.FindRecordRelationsFormSet, "find-relations-modify" +) + class NewFindBasketView(IshtarMixin, LoginRequiredMixin, CreateView): template_name = "ishtar/form.html" |
