fix: unable to update TransactionRuleAction

This commit is contained in:
Herculino Trotta
2024-10-27 15:38:47 -03:00
parent 550da1d63e
commit 79e97e7a76
2 changed files with 21 additions and 7 deletions
+10 -2
View File
@@ -102,13 +102,21 @@ class TransactionRuleActionForm(forms.ModelForm):
field = cleaned_data.get("field") field = cleaned_data.get("field")
if field and self.rule: 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 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( raise ValidationError(
_("A value for this field already exists in the rule.") _("A value for this field already exists in the rule.")
) )
return cleaned_data
def save(self, commit=True): def save(self, commit=True):
instance = super().save(commit=False) instance = super().save(commit=False)
instance.rule = self.rule instance.rule = self.rule
+11 -5
View File
@@ -169,13 +169,17 @@ def transaction_rule_action_edit(request, transaction_rule_action_id):
transaction_rule_action = get_object_or_404( transaction_rule_action = get_object_or_404(
TransactionRuleAction, id=transaction_rule_action_id TransactionRuleAction, id=transaction_rule_action_id
) )
transaction_rule = get_object_or_404(
TransactionRule, id=transaction_rule_action.rule.id
)
if request.method == "POST": 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(): if form.is_valid():
action = form.save(commit=False) form.save()
action.rule = transaction_rule_action.rule messages.success(request, _("Action updated successfully"))
action.save()
return HttpResponse( return HttpResponse(
status=204, status=204,
@@ -184,7 +188,9 @@ def transaction_rule_action_edit(request, transaction_rule_action_id):
}, },
) )
else: else:
form = TransactionRuleActionForm(instance=transaction_rule_action) form = TransactionRuleActionForm(
instance=transaction_rule_action, rule=transaction_rule
)
return render( return render(
request, request,