summaryrefslogtreecommitdiff
path: root/ishtar_common/models.py
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2025-07-17 16:31:50 +0200
committerÉtienne Loks <etienne.loks@iggdrasil.net>2025-07-18 12:44:38 +0200
commitd5442e9d37717a1c9d0d8767e669042f98cad19d (patch)
tree83929bc2c68028a57402751c683cb93994f125b6 /ishtar_common/models.py
parent0e3018b681eea2c37db559c529a236ce6084efbc (diff)
downloadIshtar-d5442e9d37717a1c9d0d8767e669042f98cad19d.tar.bz2
Ishtar-d5442e9d37717a1c9d0d8767e669042f98cad19d.zip
🐛 relations forms - clean duplicates, fix deletion (refs #6399)
Diffstat (limited to 'ishtar_common/models.py')
-rw-r--r--ishtar_common/models.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/ishtar_common/models.py b/ishtar_common/models.py
index ad7616b53..b370624fb 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -668,6 +668,21 @@ class RelationItem(models.Model):
full=full,
)
+ def clean_relations(self):
+ # clean duplicates
+ for side in ("right", "left"):
+ currents = []
+ rels = getattr(self, f"{side}_relations")
+ for relation in list(rels.all()):
+ key = (getattr(relation, f"{side}_record_id"),
+ relation.relation_type_id)
+ if key not in currents:
+ currents.append(key)
+ else:
+ relation._no_cascade_delete = True
+ # prevent cascade delete
+ relation.delete()
+
class JsonDataSectionManager(models.Manager):
def get_by_natural_key(self, name, app_label, model):
@@ -862,6 +877,9 @@ class GeneralRecordRelations(Imported):
def post_delete_record_relation(sender, instance, **kwargs):
+ if getattr(instance, "_no_cascade_delete", False):
+ # do not delete on "clean_relations" call
+ return
# delete symmetrical or inverse relation
sym_rel_type = instance.relation_type
if not instance.relation_type.symmetrical: