From 88802360db0d107a13eab1ff65e5780f1b5e11b4 Mon Sep 17 00:00:00 2001 From: JKuijperM Date: Mon, 27 Jul 2026 15:57:44 +0200 Subject: [PATCH] Refactor fuel form --- expenses_manager/expenses/forms.py | 26 ++++++++++++++----------- expenses_manager/expenses/views.py | 31 ++++++++---------------------- 2 files changed, 23 insertions(+), 34 deletions(-) diff --git a/expenses_manager/expenses/forms.py b/expenses_manager/expenses/forms.py index 6f012d6..3d88580 100644 --- a/expenses_manager/expenses/forms.py +++ b/expenses_manager/expenses/forms.py @@ -62,17 +62,16 @@ class IncomeForm(forms.ModelForm): ) -class FuelEntryForm(forms.Form): - # Expense fields - date = forms.DateField( - widget=forms.DateInput(format="%Y-%m-%d", attrs={"type": "date"}) - ) - amount = forms.DecimalField(max_digits=10, decimal_places=2) - account = forms.ModelChoiceField(queryset=None) - - # Specifics fuel fields - odometer = forms.DecimalField(label="Current kilometers") - liters = forms.DecimalField(max_digits=8, decimal_places=2) +class FuelEntryForm(forms.ModelForm): + odometer = forms.DecimalField(label="Kilómetros actuales") + liters = forms.DecimalField(max_digits=8, decimal_places=2, label="Litros") + + class Meta: + model = Expense + fields = ["date", "amount", "account"] + widgets = { + "date": forms.DateInput(format="%Y-%m-%d", attrs={"type":"date"}), + } def __init__(self, *args, **kwargs): user = kwargs.pop("user") @@ -80,6 +79,11 @@ class FuelEntryForm(forms.Form): if user: self.fields["account"].queryset = user.accounts.filter(active=True) + + if self.instance.pk and hasattr(self.instance, "fuel_data"): + fuel = self.instance.fuel_data + self.fields["odometer"].initial = fuel.odometer + self.fields["liters"].initial = fuel.liters class CategoryForm(forms.ModelForm): diff --git a/expenses_manager/expenses/views.py b/expenses_manager/expenses/views.py index 3b5cd08..dbc0675 100644 --- a/expenses_manager/expenses/views.py +++ b/expenses_manager/expenses/views.py @@ -712,14 +712,12 @@ def fuel_create(request): owner=request.user, defaults={"name": "Gasolina"}, ) - expense = Expense.objects.create( - owner=request.user, - date=form.cleaned_data["date"], - amount=form.cleaned_data["amount"], - account=form.cleaned_data["account"], - category=category, - description="Repostaje", - ) + + expense = form.save(commit=False) + expense.owner = request.user + expense.category = category + expense.description = "Repostaje" + expense.save() FuelEntry.objects.create( expense=expense, @@ -811,9 +809,7 @@ def fuel_edit(request, pk): if form.is_valid(): # Update expense - expense.date = form.cleaned_data["date"] - expense.amount = form.cleaned_data["amount"] - expense.account = form.cleaned_data["account"] + expense.date = form.save(commit=False) expense.description = "Repostaje" expense.save() @@ -824,18 +820,7 @@ def fuel_edit(request, pk): return _redirect_back(request, "expense_list") else: - fuel = expense.fuel_data - # Initialize manually - form = FuelEntryForm( - initial={ - "date": expense.date, - "amount": expense.amount, - "account": expense.account, - "odometer": fuel.odometer, - "liters": fuel.liters, - }, - user=request.user, - ) + form = FuelEntryForm(instance=expense, user=request.user) next_url = request.POST.get("next") or request.GET.get("next", "")