diff options
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 |
commit | ea642591169996faf6f0d10ebaf833f6fff94bc4 (patch) | |
tree | 2d3723458848ee200da345542f4694e4171e6709 | |
parent | 1966377f12a99889b888c5bf622a2d5d7766a731 (diff) | |
download | Ishtar-ea642591169996faf6f0d10ebaf833f6fff94bc4.tar.bz2 Ishtar-ea642591169996faf6f0d10ebaf833f6fff94bc4.zip |
🐛 Wizard: more generic management of m2m (prevent crash on misconfiguration)
-rw-r--r-- | ishtar_common/wizards.py | 20 |
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()] ) |