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:59:02 +0200
commit722f562503390e227d7a4138794db2afaaab6908 (patch)
tree226999d5e77555d9b59ebc354ca5ae8aa46f3ea3 /ishtar_common/models.py
parent0ba146309a273d49bba4fd4c10939c79dd920ca6 (diff)
downloadIshtar-722f562503390e227d7a4138794db2afaaab6908.tar.bz2
Ishtar-722f562503390e227d7a4138794db2afaaab6908.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 11ac75876..b7d6004c3 100644
--- a/ishtar_common/models.py
+++ b/ishtar_common/models.py
@@ -675,6 +675,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):
@@ -869,6 +884,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: