summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorÉtienne Loks <etienne.loks@iggdrasil.net>2024-03-01 18:14:42 +0100
committerÉtienne Loks <etienne.loks@iggdrasil.net>2024-03-01 18:14:42 +0100
commitea642591169996faf6f0d10ebaf833f6fff94bc4 (patch)
tree2d3723458848ee200da345542f4694e4171e6709
parent1966377f12a99889b888c5bf622a2d5d7766a731 (diff)
downloadIshtar-ea642591169996faf6f0d10ebaf833f6fff94bc4.tar.bz2
Ishtar-ea642591169996faf6f0d10ebaf833f6fff94bc4.zip
🐛 Wizard: more generic management of m2m (prevent crash on misconfiguration)
-rw-r--r--ishtar_common/wizards.py20
1 files changed, 17 insertions, 3 deletions
diff --git a/ishtar_common/wizards.py b/ishtar_common/wizards.py
index a3f6689dc..9801e596f 100644
--- a/ishtar_common/wizards.py
+++ b/ishtar_common/wizards.py
@@ -816,6 +816,9 @@ class Wizard(IshtarWizard):
for k in saved_args:
if k in dct:
saved_args[k] = dct.pop(k)
+ for whole_associated_model in whole_associated_models:
+ if whole_associated_model in dct:
+ dct.pop(whole_associated_model)
obj = self.get_saved_model()(**dct)
if hasattr(obj, "pre_save"):
obj.pre_save()
@@ -839,7 +842,10 @@ class Wizard(IshtarWizard):
# TODO! perf - to be really optimized
old_m2ms = {}
for model in whole_associated_models:
- related_model = getattr(obj, model + "s")
+ try:
+ related_model = getattr(obj, model + "s")
+ except AttributeError:
+ related_model = getattr(obj, model)
# manage through
if hasattr(related_model, "through") and related_model.through:
if hasattr(related_model.through, "RELATED_SET_NAME"):
@@ -862,7 +868,10 @@ class Wizard(IshtarWizard):
r.delete()
need_update = False
for key, value in m2m:
- related_model = getattr(obj, key + "s")
+ try:
+ related_model = getattr(obj, key + "s")
+ except AttributeError:
+ related_model = getattr(obj, key)
related_data = {} # used for intermediary models
# an intermediary model is used
@@ -1504,7 +1513,12 @@ class Wizard(IshtarWizard):
if hasattr(c_form, "base_models") and base_field in c_form.base_models:
base_model = base_field
if base_model:
- key = base_model + "s"
+ try:
+ __ = getattr(obj, base_model + "s")
+ key = base_model + "s"
+ except AttributeError:
+ __ = getattr(obj, base_model)
+ key = base_model
initial.setlist(
base_field, [str(val.pk) for val in getattr(value, key).all()]
)