From 79e97e7a76071cd28411e1cf22e2a0ae774d9ee3 Mon Sep 17 00:00:00 2001 From: Herculino Trotta Date: Sun, 27 Oct 2024 15:38:47 -0300 Subject: [PATCH] fix: unable to update TransactionRuleAction --- app/apps/rules/forms.py | 12 ++++++++++-- app/apps/rules/views.py | 16 +++++++++++----- 2 files changed, 21 insertions(+), 7 deletions(-) diff --git a/app/apps/rules/forms.py b/app/apps/rules/forms.py index 25a8c35..966ec26 100644 --- a/app/apps/rules/forms.py +++ b/app/apps/rules/forms.py @@ -102,13 +102,21 @@ class TransactionRuleActionForm(forms.ModelForm): field = cleaned_data.get("field") if field and self.rule: - if TransactionRuleAction.objects.filter( + # Create a queryset that excludes the current instance + existing_action = TransactionRuleAction.objects.filter( rule=self.rule, field=field - ).exists(): + ) + + if self.instance.pk: + existing_action = existing_action.exclude(pk=self.instance.pk) + + if existing_action.exists(): raise ValidationError( _("A value for this field already exists in the rule.") ) + return cleaned_data + def save(self, commit=True): instance = super().save(commit=False) instance.rule = self.rule diff --git a/app/apps/rules/views.py b/app/apps/rules/views.py index 87beb6b..4a195a6 100644 --- a/app/apps/rules/views.py +++ b/app/apps/rules/views.py @@ -169,13 +169,17 @@ def transaction_rule_action_edit(request, transaction_rule_action_id): transaction_rule_action = get_object_or_404( TransactionRuleAction, id=transaction_rule_action_id ) + transaction_rule = get_object_or_404( + TransactionRule, id=transaction_rule_action.rule.id + ) if request.method == "POST": - form = TransactionRuleActionForm(request.POST, instance=transaction_rule_action) + form = TransactionRuleActionForm( + request.POST, instance=transaction_rule_action, rule=transaction_rule + ) if form.is_valid(): - action = form.save(commit=False) - action.rule = transaction_rule_action.rule - action.save() + form.save() + messages.success(request, _("Action updated successfully")) return HttpResponse( status=204, @@ -184,7 +188,9 @@ def transaction_rule_action_edit(request, transaction_rule_action_id): }, ) else: - form = TransactionRuleActionForm(instance=transaction_rule_action) + form = TransactionRuleActionForm( + instance=transaction_rule_action, rule=transaction_rule + ) return render( request,